MySQL: BETWEEN - 查询结果不同

MySQL: BETWEEN - Different result in query

我有一个奇怪的行为,如果有人能解释一下,我会很高兴,好吗?今天是 2016 年 5 月 22 日(对于未来的读者)。

SELECT `Opened`,
  `Milestone_Status`,
  Year(`Opened`), 
  Month(`Opened`), 
  Count(*) As Total_Rows 
FROM Cases 
WHERE `Opened` BETWEEN (CURRENT_DATE() - INTERVAL 6 MONTH) AND (CURRENT_DATE() - INTERVAL 2 MONTH) 
GROUP BY Year(`Opened`), Month(`Opened`), `Milestone_Status`;

结果如下:

+------------+------------------+----------------+-----------------+------------+
| Opened     | Milestone_Status | Year(`Opened`) | Month(`Opened`) | Total_Rows |
+------------+------------------+----------------+-----------------+------------+
| 2016-12-07 | Compliant        |           2016 |              12 |          2 |
| 2017-01-10 | Compliant        |           2017 |               1 |          6 |
| 2017-02-23 | Closed Violation |           2017 |               2 |          1 |
| 2017-02-27 | Compliant        |           2017 |               2 |          1 |
| 2017-03-01 | Closed Violation |           2017 |               3 |          1 |
| 2017-03-06 | Compliant        |           2017 |               3 |          2 |
+------------+------------------+----------------+-----------------+------------+
6 rows in set (0.02 sec)

所以当我将一个月的差异从 2 更改为 3 时,它应该显示直到 Month('Opened') 2 的行,但是..

SELECT `Opened`,
  `Milestone_Status`,
  Year(`Opened`), 
  Month(`Opened`), 
  Count(*) As Total_Rows 
FROM Cases WHERE `Opened` BETWEEN (CURRENT_DATE() - INTERVAL 6 MONTH) AND (CURRENT_DATE() - INTERVAL 3 MONTH) 
GROUP BY Year(`Opened`), Month(`Opened`), `Milestone_Status`;

result:
+------------+------------------+----------------+-----------------+------------+
| Opened     | Milestone_Status | Year(`Opened`) | Month(`Opened`) | Total_Rows |
+------------+------------------+----------------+-----------------+------------+
| 2016-12-07 | Compliant        |           2016 |              12 |          2 |
| 2017-01-10 | Compliant        |           2017 |               1 |          6 |
+------------+------------------+----------------+-----------------+------------+
2 rows in set (0.01 sec)

有什么想法,更好的方法吗?

没有,输出是正确的。作为

 CURRENT_DATE() - INTERVAL 3 MONTH 

2017-02-22

因此您的查询变为:

SELECT `Opened`,`Milestone_Status`,YEAR(`Opened`), MONTH(`Opened`), 
COUNT(*) AS Total_Rows
FROM Cases WHERE `Opened`
BETWEEN (2016-11-22) AND (2017-02-22)
GROUP BY YEAR(`Opened`), MONTH(`Opened`), `Milestone_Status`;

So when I change one month difference from 2 to 3, it should show the lines till Month('Opened') 2, but ..

因为今天是 22 所以你的结果是正确的。

如果你想从 2 得到月份('Opened'),用月份试试。

编辑:CURRENT_DATE 使用 DATEADD()

例如:3 个月:DATEADD(m, -3, GETDATE()).

希望对您有所帮助。