我有一个表中有一个日期字段的条目。每个条目都有不同的日期。 我想选择上个月登记在数据库中的所有条目。怎么样?如何选择上个月的所有条目?
我想:
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