2012-08-09 7 views
6

コードは以下の通りです:?私は日がにある四半期の開始日を見つけるために私の代わりに置くために何かを見つけるためにしようとしているMySQLで四半期の最初の日付を取得するにはどうすればよいですか?私がこれまで持って

SELECT 
QUARTER(r.callDate) AS quar, 
YEAR(r.callDate) AS ryear, 
???????? AS scoreDateStart, 
(SELECT DATE (DATE_SUB(DATE_ADD(CONCAT(YEAR(r.callDate), '-01-01'), INTERVAL QUARTER(r.callDate) QUARTER), INTERVAL 1 DAY))) AS scoreDateEnd, 
group_concat(DISTINCT(r.resultId) separator ', ') AS resultIds 
FROM results AS r 
GROUP BY quar, ryear 
ORDER BY quar; 

I。グーグルリングを試みたが役に立たなかった。

出力の例は次のようになります。

'1', '2012', '2012-01-01', '2012-03-31', '57, 58, 59' 
'2', '2012', '2012-04-01', '2012-06-30', '10549, 10551, 12598' 
+0

期待される出力? – Jocelyn

+0

良いアイデアジョーシン、感謝!私は例を含めるために自分の投稿を編集しました。 – richie

答えて

16

この試してみてください。当四半期の使用の開始日を取得するには

をこの:

SELECT MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER 
             - INTERVAL 1 QUARTER 

だからあなたのクエリは次のようになり:

SELECT 
QUARTER(r.callDate) AS quar, 
YEAR(r.callDate) AS ryear, 
MAKEDATE(YEAR(r.callDate), 1) + INTERVAL QUARTER(r.callDate) QUARTER - 
    INTERVAL 1 QUARTER AS scoreDateStart, 
(SELECT DATE (DATE_SUB(DATE_ADD(CONCAT(YEAR(r.callDate), '-01-01'), 
INTERVAL QUARTER(r.callDate) QUARTER), INTERVAL 1 DAY))) AS scoreDateEnd, 
group_concat(DISTINCT(r.resultId) separator ', ') AS resultIds 
FROM results AS r 
GROUP BY quar, ryear 
ORDER BY quar; 
+1

私はそれがトリックを行ったと思う、私は今それをテストしています。ありがとうジョー! – richie

+1

これは、日付文字列のCURDATE()を変更することによって、現在の日付以外の四半期の開始日を見つけるために一般化することができます。 –

+1

現在の四半期の最終日が必要な場合は、「INTERVAL 1 QUARTER」の代わりに「INTERVAL 1 DAY」を引いてください。 –

関連する問題