2012-08-09 122 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

相关问题