2010-09-02 55 views
1

我有以下查詢:選擇WHERE日期比當前日期更大

SELECT id 
FROM auctions 
WHERE end_dt > TIME_TO_SEC(TIMEDIFF(end_dt, now())) > '0' 
GROUP BY auctions.id 
ORDER BY end_dt ASC 
LIMIT 15 

這實在是太慢了。但基本上,我們試圖通過檢查剩餘秒數是否大於零來選擇最近的15條即將「結束」的記錄。

我覺得我過於複雜了,而且想我可以做這樣的事情:

SELECT id 
FROM auctions 
WHERE end_dt > now() 
GROUP BY auctions.id 
ORDER BY end_dt ASC 
LIMIT 15 

然而,這將返回不同的結果。

有沒有人有更好的解決方案?

謝謝!

+0

1.如果你只需要'id' - 那麼不要對它進行分組,而是使用'DISTINCT'來代替。 2.另外 - 確保你有'end_dt + id'(按照這個特定的順序)複合索引 – zerkms 2010-09-03 00:21:52

回答

2

嘗試

WHERE `end_dt` BETWEEN DATE_SUB(NOW() , INTERVAL 15 MINUTE) 
          AND NOW() 

來源:MySQL Select rows where timestamp column between now and 10 minutes ago

+0

如果我知道你在打開,我會一直等你放下它= D – krx 2010-09-02 21:15:53

+2

單引號會導致封裝文本被視爲字符串/ varchar - 我將單引號更改爲反引號,但只有引用同時也是[MySQL保留字]的列/表名時才需要反引號(http://dev.mysql.com/doc/refman /5.1/en/reserved-words.html) – 2010-09-02 21:15:55

+0

這也給了我不同的結果。 – dzm 2010-09-02 23:20:34

0

好它結束了做END_DT>現在()正確的 - 被插入如此多的記錄,它甚至秒,它採取之間改變了再試一次..

相關問題