2

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

我想出了以下方法,但这仅在月份不是一月时才有效,

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 

但这不是我想要的,我只想选择去年 12 月的销售额(请记住,表中还有其他年份我不想要,即 1979 年、1981 年......等)

下一部分相同的报告,我需要选择最近 2 个日历月,我也不知道如何执行此操作。

4

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值以选择多个月份。

于 2013-01-03T12:25:06.993 回答
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')
于 2013-01-03T14:11:07.447 回答