簡體   English   中英

MySQL:獲取上次日期的記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM