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()).
希望对您有所帮助。
我有一个奇怪的行为,如果有人能解释一下,我会很高兴,好吗?今天是 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()).
希望对您有所帮助。