簡體   English   中英

僅在 MySQL 中返回最近 3 個月的記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM