如何在MySQL中每月获取数据

时间:2018-04-19 08:39:11

标签: mysql sql

我试图每个月获取一次数据。

我是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 |

1 个答案:

答案 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子句看到此类查询,以计算各个组的聚合。但是,在您的情况下,您似乎希望聚合整个表格。