Mysql:获取上次日期的记录

时间:2015-06-30 07:35:35

标签: mysql

我希望得到所有不是"更早的记录"超过20天。如果在20天内没有记录,我想要最近一天的所有记录。我这样做:

SELECT COUNT(DISTINCT t.id) FROM t
WHERE 
(DATEDIFF(NOW(), t.created) <= 20 
OR 
(date(t.created) >= (SELECT max(date(created)) FROM t)));

到目前为止,这是有效的,但它很慢。创建是一个日期时间,可能是由于转换为日期...任何想法如何加快这一点?

1 个答案:

答案 0 :(得分:0)

SELECT COUNT(*) FROM (
 SELECT * FROM t WHERE datediff(now(),created) between 0 and 20
 UNION 
 SELECT * FROM (SELECT * FROM t WHERE created<now() LIMIT 1) last1
) last20d

我使用了between子句,以防万一以后表中可能有日期。这些将被排除在外。如果只是需要count()

,您也可以简化选择
SELECT COUNT(*) FROM (
 SELECT id FROM t WHERE datediff(now(),created) between 0 and 20
 UNION 
 SELECT id FROM (SELECT id FROM t WHERE created<now() LIMIT 1) last1
) last20d

否则,在第一个选择版本中,如果您想要所选记录的所有数据,则可以省略外部选择。 UNION将确保排除重复项(在其他情况下,我总是使用UNION ALL,因为它更快)。