sql:mysql:DAYOFMONTH函数和INTERVAL搭配的使用

SELECT
    id,
    source                                                                      AS source,
    DATE(DATE_SUB(statistic_time, INTERVAL DAYOFMONTH(statistic_time) - 1 DAY)) AS __timestamp,
    SUM(pay_money)                                                              AS `SUM(pay_money)`
FROM
    t_cal_sume
WHERE
    statistic_time >= STR_TO_DATE('2018-05-20 00:00:00', '%Y-%m-%d %H:%i:%s')
AND statistic_time <= STR_TO_DATE('2019-05-20 00:00:00', '%Y-%m-%d %H:%i:%s')
AND flag = 1
AND id < 300
GROUP BY
    source,
    DATE(DATE_SUB(statistic_time, INTERVAL DAYOFMONTH(statistic_time) - 1 DAY))
ORDER BY
    `SUM(pay_money)` DESC LIMIT 10000;

分析如上sql:

DAYOFMONTH(time) 是返回此日期time在它当月属于第多少天

sql:mysql:DAYOFMONTH函数和INTERVAL搭配的使用

 

 DATE(DATE_SUB(statistic_time, INTERVAL DAYOFMONTH(statistic_time) - 1 DAY))

如下图:sql:mysql:DAYOFMONTH函数和INTERVAL搭配的使用

 

DATE_SUB() 函数:

从日期减去指定的时间间隔

语法

DATE_SUB(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是你希望添加的时间间隔。

DATE_SUB(statistic_time, INTERVAL DAYOFMONTH(statistic_time) - 1 DAY) 意思就是按天作为时间间隔

 以上sql就是算出这天是本月第几天,这个就是时间间隔,将这个日期减去时间间隔换算为本月1号,如果求本月合计的话就把当月1号累加即可。