2012-08-09 66 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; 

我?已嘗試使用谷歌搜索,但無濟於事。

輸出的一個例子是:

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

你可以添加(s)的預期產出? – Jocelyn 2012-08-09 13:35:14

+0

好主意Jocelyn,謝謝!我編輯了我的帖子以包含一個示例。 – richie 2012-08-09 13:38:49

回答

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 2012-08-09 13:41:46

+1

通過更改日期字符串的CURDATE(),可以將其推廣到查找除當前日期以外的其他季度的開始日期。 – 2013-09-19 19:30:13

+1

如果您需要本季度的最後一天,請減去'INTERVAL 1 DAY'而不是'INTERVAL 1 QUARTER'。 – 2013-09-19 19:30:38

相關問題