我正在运行一个简单的查询,该查询返回2岁(上个月或下个月的生日)的孩子数。以下查询返回带有count的单行:

SELECT COUNT(*)
FROM table AS t
-- Child turning 2
AND t.dob <= DATE_SUB(NOW(), INTERVAL 23 MONTH)
AND t.dob >= DATE_SUB(NOW(), INTERVAL 25 MONTH)


我希望能够基于此查询并返回多个计数行,每个计数行为2个月,这样我就可以预测第二个生日了。

我可以做这样的事情:

SELECT COUNT(*)
FROM table AS t
-- Child turning 2
AND t.dob <= DATE_SUB(NOW(), INTERVAL 23 MONTH)
AND t.dob >= DATE_SUB(NOW(), INTERVAL 25 MONTH)

UNION

SELECT COUNT(*)
FROM table AS t
-- Child turning 2
AND t.dob <= DATE_SUB(NOW(), INTERVAL 21 MONTH)
AND t.dob >= DATE_SUB(NOW(), INTERVAL 23 MONTH)

UNION...


但这是愚蠢的低效且非常笨拙。

作为输出,我希望看到以下内容:

count    |date range
---------------------------------
327      |2012-03-01 - 2012-04-31
---------------------------------
532      |2012-05-01 - 2012-06-31


我认为我需要对GROUP BY进行一些操作,但是不确定如何执行此操作。

非常感谢。

最佳答案

select
case
when t.dob between date_sub(now(), interval 25 month) and date_sub(now(), interval 23 month) then 'between -25 and -23 month'
when t.dob between date_sub(now(), interval 22 month) and date_sub(now(), interval 20 month) then 'between -22 and -20 month'
when t.dob between date_sub(now(), interval 19 month) and date_sub(now(), interval 17 month) then 'between -19 and -17 month'
when t.dob between date_sub(now(), interval 16 month) and date_sub(now(), interval 14 month) then 'between -16 and -14 month'
end as my_ranges,
count(*)
from
t
group by my_ranges

关于mysql - 2个月内的出生分组日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22843402/

10-13 22:27