[英]Returning records from the last 3 months only in MySQL
我有一個帶有時間戳字段的表。 如何獲取最近 3 個月的數據?
特別是,三月是我當前的月份,比如說03/2012 。 我只需要返回 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 個月: 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))
另一種可能性是:
SELECT * WHERE your_date_column > LAST_DAY(CURRENT_DATE - INTERVAL 3 MONTH);
在此處使用此代碼獲取從某個日期開始的前 3 個月
SELECT * FROM table WHERE date_column>= DATE_FORMAT(current_date(), '%Y-%m-01') - INTERVAL 3 MONTH and date_column< DATE_FORMAT(current_date(), '%Y-%m-01')
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.