如何在mysql中获取每月的数据

pcww981p  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(314)

我试着每个月都得到数据。
我是个新手 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         |

样本数据

| 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 |
bxpogfeg

bxpogfeg1#

您需要在这里使用条件聚合,如下所示:

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 子句计算单个组的聚合。但是,在您的示例中,似乎您希望在整个表上进行聚合。

相关问题