我有一個表中有一個日期字段的條目。每個條目都有不同的日期。 我想選擇上個月登記在數據庫中的所有條目。怎麼樣?如何選擇上個月的所有條目?
我想:
SELECT *
FROM registries
WHERE reg_date = DATE_FORMAT(MAX(reg_date), "%m")`
...沒有成功
我有一個表中有一個日期字段的條目。每個條目都有不同的日期。 我想選擇上個月登記在數據庫中的所有條目。怎麼樣?如何選擇上個月的所有條目?
我想:
SELECT *
FROM registries
WHERE reg_date = DATE_FORMAT(MAX(reg_date), "%m")`
...沒有成功
在OMG小馬與更正查詢:
SELECT
r.*
FROM
registries AS r
JOIN (
SELECT
MAX(t.reg_date) AS max_date
FROM
registries AS t) AS t
ON DATE_FORMAT(t.max_date, '%Y-%m') = DATE_FORMAT(r.reg_date, '%Y-%m')
雖然查詢的性能不會是優秀的,因爲它操作JOIN兩個計算值。 我相信它仍然可以表現得體,除非你開始擊打數百萬條記錄。
SELECT
r.*
FROM
registries AS r
WHERE
r.reg_date BETWEEN '<first_day>' AND LAST_DAY('<first_day>')
隨着FIRST_DAY爲:
在另一方面,你也許可以更快地通過第一個查詢的MAX(reg_date)
SELECT
CONCAT(DATE_FORMAT(MAX(r.reg_date), "%Y-%m"), '-01') AS first_day
FROM
registries AS r
然後注入在查詢結果中運行它以前的查詢結果的佔位符。 只要你索引了reg_date,這應該運行得非常快。
注意:LAST_DAY是僅限MySQL的函數。
如果你想在過去的30天,這將工作
SELECT * FROM `registries`
WHERE `reg_date` > DATE_SUB(NOW(), INTERVAL 30 DAY)
這。用這個。 – Entendu 2010-06-02 02:31:48
這會給你上個月的所有記錄(May):
SELECT [col,] DATEDIFF(時間戳, 2010-05-01 00:00)DIF1, DATEDIFF(時間戳,2010-05-31 00:00) DIF2 FROM表名HAVING DIF1> = 0 AND DIF2 < = 0
上一個日曆月?過去30天? – 2010-06-01 23:20:59