如何选择上个月的所有参赛作品?

时间:2010-06-01 23:19:01

标签: sql mysql database

我有一个表格,其中的条目有一个DATE字段。每个条目都有不同的日期。 我想选择上个月在数据库中注册的所有条目。怎么样?

我试过了:

SELECT * 
  FROM registries 
 WHERE reg_date = DATE_FORMAT(MAX(reg_date), "%m")` 

......没有成功

3 个答案:

答案 0 :(得分:3)

如果您想要过去30天,这将有效

SELECT * FROM `registries` 
 WHERE `reg_date` > DATE_SUB( NOW(), INTERVAL 30 DAY )

答案 1 :(得分:1)

基于OMG Ponies的更正查询:

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。 我相信除非你开始打击数百万条记录,否则它仍然可以正常运行。

另一方面,您可以通过首先查询MAX(reg_date)

来更快地运行它
SELECT 
  CONCAT(DATE_FORMAT(MAX(r.reg_date), "%Y-%m"), '-01') AS first_day
FROM 
  registries AS r

然后在查询中注入结果:

SELECT 
  r.*
FROM 
  registries AS r
WHERE
  r.reg_date BETWEEN '<first_day>' AND LAST_DAY('<first_day>')

使用first_day作为前一个查询结果的占位符。 如果你索引reg_date,这应该运行得非常快。

注意:LAST_DAY是仅限MySQL的功能。

答案 2 :(得分:0)

这将为您提供上个月(5月)的所有记录:

  

SELECT [col,] DATEDIFF(TIMESTAMP,   2010-05-01 00:00)dif1,   DATEDIFF(TIMESTAMP,2010-05-31 00:00)   dif2 FROM tablename HAVING dif1&gt; = 0   AND dif2&lt; = 0