首页 文章

如何选择最后一个日历月(不是间隔)?

提问于
浏览
2

我有一个名为transaction_date的日期时间字段,在我需要选择上个日历月的报告中,我该怎么做? (这应该像一月一样工作一个月)

我想出了以下内容,但这只适用于月份不是1月的情况,

SELECT SUM(amount)  AS pay_month FROM `users_payment`  WHERE  MONTH(transaction_datetime)= MONTH(NOW()) AND YEAR(transaction_datetime)=YEAR(NOW())

有很多使用INTERVAL函数的例子,但这只是选择时间间隔而不是我想要的日历月..

喜欢

SELECT SUM(amount)  AS `year_month` FROM `users_payment`   WHERE  DATE_ADD(NOW(), INTERVAL -1 MONTH) < transaction_datetime

但这不是我想要的,我想去年仅选择DECEMBER的销售额(记得在表中还有其他年份,我不想要,即1979年,1981年......等)

同样的报告下一节,我需要选择最后2个日历月,我不知道怎么做也是这样的 .

2 回答

  • 3

    你试过以下吗?

    SELECT SUM(amount)  AS `year_month` FROM `users_payment`
    WHERE MONTH(DATE_ADD(NOW(), INTERVAL -1 MONTH)) = MONTH(transaction_datetime)
    

    以上应该显示上个月;然而,它并没有区分年份 .

    在第二个想法,我看到你想要做什么 - 获得给定月份的所有交易 . 尝试这样的事情 .

    SELECT SUM(amount)  AS `year_month` FROM `users_payment`
    WHERE transaction_datetime BETWEEN date_format(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
       AND last_day(NOW() - INTERVAL 1 MONTH)
    

    这将列出上一个日历月的所有交易 . 更改 INTERVAL 值以选择多个月 .

  • 1

    你可以尝试这个 -

    SELECT SUM(amount)  AS pay_month FROM `users_payment`  WHERE  
    PERIOD_ADD(DATE_FORMAT(NOW(),'%Y%m'), -1) = DATE_FORMAT(transaction_datetime,'%Y%m')
    

相关问题