36

タイムスタンプフィールドのあるテーブルがあります。過去3か月のデータを取得するにはどうすればよいですか?

特に、3月は私の今月です。たとえば2012年3月です。3月、2月、1月のレコードのみを返す必要があります。

4

5 に答える 5

82

今日の3か月前:

select * from table where timestamp >= now()-interval 3 month;

月の最初から開始します。

select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;
于 2013-03-13T21:45:28.283 に答える
14

今月の最初の日を取得するには、次を使用できます。

DATE_FORMAT(CURDATE(), '%Y-%m-01')

現在の日付が2013-03-13、の場合は戻ります。2013-03-01この日付から2か月を差し引くだけで、を取得でき2013-01-01ます。クエリは次のようになります。

SELECT *
FROM yourtable
WHERE data >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH
于 2013-03-13T22:18:25.647 に答える
4

SQL Serverを使用していると仮定すると(Oracle、MySQLなどには同様の日付関数があります)、dateadd関数を使用して、現在の日付に間隔を加算または減算できます。

完全な3か月が必要な場合は、今日から3か月を引くことができます。 DATEADD(m,-3,getdate())

ただし、おっしゃるように、1月、2月、3月のデータのみが必要です。今日の日付に基づいて計算を行う必要があります。dateadd(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))

そして最後に、次のようなクエリを取得します

SELECT fields 
FROM table 
WHERE timestampfield > DATEADD(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate()))  + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))

---編集---erf、「mysql」タグに気づきました... MySQLの日付関数の詳細についてはこちらをご覧ください: https ://dev.mysql.com/doc/refman/5.5/en/date -and-time-functions.html

于 2013-03-13T21:54:51.267 に答える
3

これは古い質問ですが、他の人の時間を節約し、(1)当月の日付と(2)前の2か月の日付(データ統計を表示する場合に一般的)が必要な場合に上記の回答を要約するためです:

WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR  (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
于 2015-07-03T14:19:07.007 に答える
-1
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR  (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
于 2021-10-13T10:01:34.693 に答える