我有一个名为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个日历月,我不知道怎么做也是如此。
答案 0 :(得分: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 :(得分: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')