タイムスタンプフィールドのあるテーブルがあります。過去3か月のデータを取得するにはどうすればよいですか?
特に、3月は私の今月です。たとえば2012年3月です。3月、2月、1月のレコードのみを返す必要があります。
タイムスタンプフィールドのあるテーブルがあります。過去3か月のデータを取得するにはどうすればよいですか?
特に、3月は私の今月です。たとえば2012年3月です。3月、2月、1月のレコードのみを返す必要があります。
今日の3か月前:
select * from table where timestamp >= now()-interval 3 month;
月の最初から開始します。
select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;
今月の最初の日を取得するには、次を使用できます。
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
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
これは古い質問ですが、他の人の時間を節約し、(1)当月の日付と(2)前の2か月の日付(データ統計を表示する場合に一般的)が必要な場合に上記の回答を要約するためです:
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))