Mysql 将我过去一年的结果限制为过去30天的零
我有一个查询,根据过去12个月的毒理学测试结果,即使该月没有结果Mysql 将我过去一年的结果限制为过去30天的零,mysql,sql,Mysql,Sql,我有一个查询,根据过去12个月的毒理学测试结果,即使该月没有结果 SELECT y, m, Count(ToxicologyTests.receiveDate) as count FROM ( SELECT y, m FROM ( SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years, ( SELECT 1 m UNION ALL SELECT 2 UNIO
SELECT y, m, Count(ToxicologyTests.receiveDate) as count
FROM (
SELECT y, m
FROM (
SELECT YEAR(CURDATE()) y
UNION ALL SELECT YEAR(CURDATE())-1) years,
(
SELECT 1 m
UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
) months
) ym
LEFT JOIN ToxicologyTests
ON ym.y = YEAR(ToxicologyTests.receiveDate)
AND ym.m = MONTH(ToxicologyTests.receiveDate)
WHERE (
y=YEAR(CURDATE())
AND m<=MONTH(CURDATE())
)
OR (
y<YEAR(CURDATE())
AND m>MONTH(CURDATE())
)
GROUP BY y, m
这将正确地输出每月的测试次数,即使没有。在过去的12个月里,我一直在努力将这个问题从过去的12个月改为过去的30天,如果那天没有测试,我也会保持零。有什么建议吗
MYSQL您能试试这个查询吗?我已更改WHERE子句:
SELECT y, m, Count(ToxicologyTests.receiveDate) as count
FROM (
SELECT y, m
FROM
(SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
(SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
LEFT JOIN ToxicologyTests
ON ym.y = YEAR(ToxicologyTests.receiveDate)
AND ym.m = MONTH(ToxicologyTests.receiveDate)
WHERE ToxicologyTests.receiveDate BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()
GROUP BY y, m
如果是我,我会处理应用程序代码中的零,同时格式化sql查询以使其更具可读性。我注意到第一个FROM的结尾丢失,请检查查询是否正确