我试图每个月获取一次数据。
我是MySQL
的新手。
我只是谷歌并从互联网上学习。
因此,我的查询可能不合适。
如果不合适,请修正我的问题。
这是我的查询
SELECT
SUM( cr_dt > EXTRACT( YEAR_MONTH FROM CURDATE() )
AND
cr_dt < EXTRACT( YEAR_MONTH FROM CURDATE() + INTERVAL 1 MONTH )
) as thisMonth,
SUM( cr_dt > EXTRACT( YEAR_MONTH FROM CURDATE() - INTERVAL 1 MONTH
AND
cr_dt < EXTRACT( YAER_MONTH FROM CURDATE()
) as last1Month
FROM MYTABLE
我刚刚找到EXTRACT()
和INTERVAL
,但我不知道它可能合适。
如果您有更好的解决方法,请分享。
我的预期
| thisMonth | last1Month |
+-----------+------------+
| 123 | 1294 |
我现在看到什么
| thisMonth | last1Month |
+-----------+------------+
| 0 | 0 |
SAMPLE DATAS
| idx | cr_dt |
+-----+---------------------+
| 1 | 2018-02-01 17:00:00 |
| 2 | 2018-02-19 16:00:00 |
| 3 | 2018-02-28 15:00:00 |
| 4 | 2018-03-04 14:00:00 |
| 5 | 2018-04-01 13:00:00 |
| 6 | 2018-04-09 12:00:00 |
| 7 | 2018-04-12 11:00:00 |
| 8 | 2018-04-17 10:00:00 |
答案 0 :(得分:1)
你需要在这里使用条件聚合,如下所示:
SELECT
COUNT(CASE WHEN cr_dt >= DATE_FORMAT(CURRENT_DATE, '%Y/%m/01')
THEN 1 END) AS thisMonth,
COUNT(CASE WHEN cr_dt >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y/%m/01') AND
cr_dt < DATE_FORMAT(CURRENT_DATE, '%Y/%m/01') THEN 1 END) AS last1Month
FROM MYTABLE
WHERE cr_dt >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y/%m/01');
更典型的是,您可能会使用GROUP BY
子句看到此类查询,以计算各个组的聚合。但是,在您的情况下,您似乎希望聚合整个表格。