接下来 7 天的生日计数,需要计算每一天和总数
Count of birthdays for next 7 days and need count for each day and total
我在本站看到过这样的问题;但他们只是提供生日数据而不是计数
喜欢:mysql query to get birthdays for next 10 days
SQL Select Upcoming Birthdays
这里我想要的是接下来 9 天的每一天的生日计数
从 2 天后:例如今天是 03-18,所以我想将 03-20 的数据发送到 03-26
这是我的查询
SELECT count(DOB) as count,DAYOFMONTH(DOB) as day
from patient
where
day(DOB) >= day(DATE_ADD(CURDATE(), interval 2 day))
and day(DOB) < day(DATE_ADD(CURDATE(), interval 9 day))
and month(DOB) < month(DATE_ADD(CURDATE(), interval 1 month))
group by day
ORDER BY day ASC
它给出的输出如下:
count date
2444 03-20
2337 03-21
2354 03-22
2064 03-23
2118 03-24
2357 03-25
2181 03-26
但根据我查询 DOB LIKE '%-03-20' 计数不同的地方,它是不正确的。
提前致谢。
这样做的一个好方法是生成一个包含这些生日的适当日期的子查询。这很好,因为它可以在月和年的滚动中使用。
那个子查询就是这个,满足您第 2-9 天的要求。
SELECT MONTH(CURDATE()+INTERVAL 2+n DAY) mn,
DAYOFMONTH(CURDATE()+INTERVAL 2+n DAY) dy
FROM (
SELECT 0 n UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) seq
然后,您可以将该结果加入您的出生日期列表,并像这样进行总结。
SELECT COUNT(*), MONTH(p.DOB) birthday_month, DAYOFMONTH(p.DOB) birthday
FROM patient p
JOIN (
SELECT MONTH(CURDATE()+INTERVAL 2+n DAY) mn,
DAYOFMONTH(CURDATE()+INTERVAL 2+n DAY) dy
FROM (
SELECT 0 n UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) seq
) d ON MONTH(p.DOB) = d.mn AND DAYOFMONTH(p.DOB) = d.dy
GROUP BY MONTH(p.DOB), DAYOFMONTH(p.DOB)
ORDER BY MONTH(p.DOB), DAYOFMONTH(p.DOB)
这应该会给你正确的计数。
在这种工作中使用数值范围非常容易出错。
我在本站看到过这样的问题;但他们只是提供生日数据而不是计数 喜欢:mysql query to get birthdays for next 10 days
SQL Select Upcoming Birthdays
这里我想要的是接下来 9 天的每一天的生日计数 从 2 天后:例如今天是 03-18,所以我想将 03-20 的数据发送到 03-26
这是我的查询
SELECT count(DOB) as count,DAYOFMONTH(DOB) as day
from patient
where
day(DOB) >= day(DATE_ADD(CURDATE(), interval 2 day))
and day(DOB) < day(DATE_ADD(CURDATE(), interval 9 day))
and month(DOB) < month(DATE_ADD(CURDATE(), interval 1 month))
group by day
ORDER BY day ASC
它给出的输出如下:
count date
2444 03-20
2337 03-21
2354 03-22
2064 03-23
2118 03-24
2357 03-25
2181 03-26
但根据我查询 DOB LIKE '%-03-20' 计数不同的地方,它是不正确的。
提前致谢。
这样做的一个好方法是生成一个包含这些生日的适当日期的子查询。这很好,因为它可以在月和年的滚动中使用。
那个子查询就是这个,满足您第 2-9 天的要求。
SELECT MONTH(CURDATE()+INTERVAL 2+n DAY) mn,
DAYOFMONTH(CURDATE()+INTERVAL 2+n DAY) dy
FROM (
SELECT 0 n UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) seq
然后,您可以将该结果加入您的出生日期列表,并像这样进行总结。
SELECT COUNT(*), MONTH(p.DOB) birthday_month, DAYOFMONTH(p.DOB) birthday
FROM patient p
JOIN (
SELECT MONTH(CURDATE()+INTERVAL 2+n DAY) mn,
DAYOFMONTH(CURDATE()+INTERVAL 2+n DAY) dy
FROM (
SELECT 0 n UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) seq
) d ON MONTH(p.DOB) = d.mn AND DAYOFMONTH(p.DOB) = d.dy
GROUP BY MONTH(p.DOB), DAYOFMONTH(p.DOB)
ORDER BY MONTH(p.DOB), DAYOFMONTH(p.DOB)
这应该会给你正确的计数。
在这种工作中使用数值范围非常容易出错。