2

レポートで transaction_date という日時フィールドがあり、先月を選択する必要があります。これを行うにはどうすればよいですか? (これは1月のような月にも機能するはずです)

私は次のことを思いつきましたが、これは月が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 

しかし、これは私が望んでいるものではありません。昨年の 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 に答える