Mysql 将我过去一年的结果限制为过去30天的零

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

我有一个查询,根据过去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 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的结尾丢失,请检查查询是否正确