如何选择上个日历月(不是间隔)?

时间:2013-01-03 12:20:27

标签: mysql

我有一个名为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 个答案:

答案 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')