[英]SQL select query order by day and month
讓我們假裝今天是2月3日。
我有一張桌子:
CREATE TABLE devotion
(
id serial NOT NULL,
date timestamp without time zone
}
我有4條記錄:
id date
1 2013-01-01
2 2013-02-02
3 2013-03-03
4 2013-04-04
我想構建一個選擇查詢,該查詢將按以下順序返回所有記錄(按日期排序,但首先是即將到來的日期,傳遞日期附加到列表末尾):
id date
3 2013-03-03 (upcoming dates first)
4 2013-04-04
1 2013-01-01 (passed dates appended to the end of the list)
2 2013-02-02
所有記錄都具有相同的年份。 事實上,一年並不重要,只有日和月。 如果你能建議一個更好的結構,非常歡迎你。
order by case when date1 > now() then 0 else 1 end case, date1
將給出3,4,1,2的順序
更簡單:
ORDER BY (date1 < now()), date1
您可以按表達式的布爾值(date1 < now())
排序。
FALSE
在TRUE
之前排在NULL
之前。
這是另一種解決方案。 當然,上述答案已經足夠好了。 您不能假設今天是2月3日,因為我們采用的是Now()
,它表示Feb 2nd
。 所以我使用了演示數據2013-02-01
。 而這個答案主要取決於您的ID
。 可以說ID是順序的,日期也是如此。 任何人都可以自由評論這個邏輯的狡猾部分 ..
select id, `date`,
case when `date` > Date_Format(Now(),'%Y-%m-%d')
then id-3
else id+2 end as x
from demo
order by x asc
;
| ID | DATE | X |
--------------------------------------------
| 3 | March, 03 2013 00:00:00+0000 | 0 |
| 4 | April, 04 2013 00:00:00+0000 | 1 |
| 1 | January, 01 2013 00:00:00+0000 | 3 |
| 2 | February, 01 2013 00:00:00+0000 | 4 |
如果您使用的是MySQL,我會說只使用RIGHT
,但以下內容應在psql上運行:
SELECT * FROM devotion ORDER BY substring(to_char( date, 'YYYY-MM-DD') from char_length(to_char( date, 'YYYY-MM-DD')) - 5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.