其他人已經發布的答案,如果你總是希望將來的日期:
select *
from your_table
where date > now()
order by date
limit 1
如果沒有將來的日期,但您仍想返回的最後日期,那麼你可以通過修改order by
做到這一點條款:
select *
from your_table
order by (date > now()) desc,
(case when date > now() then date end) ,
date desc
limit 1;
EDIT(在響應評論):
要處理 「今天」 爲最接近的日期,你需要轉換now()
的日期和使用>=
:
select *
from your_table
order by (`date` >= date(now())) desc,
(case when `date` >= date(now()) then `date` end) ,
`date` desc
limit 1;
的order by
條款有三個組成部分。第一個是任何未來日期的標誌。這將首先考慮未來的日期。後兩個條款按日期排序。第一個按照升序排列未來的日期。過去的日期都具有相同的值('NULL'
),所以這些受第三個條款的影響,這些條款按降序排列。
你總是希望得到的日期,將來還是要之前或之後拿到最接近的日期當前日期? – dethtron5000
這兩個日期是等距的。你如何確定2013-08-03比2013-08-01更受歡迎? – eggyal