[英]Mysql: Get records from last date
我想獲取所有不早於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)));
到目前為止,它仍然有效,但是速度很慢。 創建的是日期時間,可能是由於轉換為日期而已...任何想法如何加快速度?
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
因為它速度更快)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.