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在它当月属于第多少天

 

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

如下图:

 

DATE_SUB() 函数:

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

语法

DATE_SUB(date,INTERVAL expr type)

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

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

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值