我想一個別樣Oracle.Its排序像我有三列,即日期,開始時間&結束時間,我需要在以下方式排序列在Oracle中的一列。排序基於時間
如果當前時間爲開始時間和結束時間之間則該行應該來@它應該通過正常的升序進行排序top.Otherwise。
現在我的查詢看起來像這樣
select * from details order by date,start_time
我如何利用當前的時間考慮,而排序?
我想一個別樣Oracle.Its排序像我有三列,即日期,開始時間&結束時間,我需要在以下方式排序列在Oracle中的一列。排序基於時間
如果當前時間爲開始時間和結束時間之間則該行應該來@它應該通過正常的升序進行排序top.Otherwise。
現在我的查詢看起來像這樣
select * from details order by date,start_time
我如何利用當前的時間考慮,而排序?
是來到我的腦海裏第一個念頭:
SELECT *
FROM details
ORDER BY (CASE WHEN date_column BETWEEN start_time AND end_time THEN 0 ELSE 1 END)
, date_column
, start_time;
如果「當前時間」的意思是「SYSDATE」,並假設「正常升序排序」是指「按升序由START_TIME排序」你可以不喜歡
SELECT *
FROM details
ORDER BY (CASE WHEN sysdate BETWEEN start_time AND end_time
THEN 1
ELSE 0
END) desc,
start_time asc
的東西,如果你的意思是別的東西,一些樣本數據和預期的產出肯定會有所幫助。
您可能需要調整的語法到Oracle,但這個概念應該適用。
SELECT d.*,
CASE WHEN sysdate BETWEEN Start_Time AND End_Time THEN 0 ELSE 1 END SortKey
FROM Details
ORDER BY SortKey, Date, Start_Time;
基本上,這會創建一個人工分組結果的列,因爲您希望他們排序。它可能是一種有價值的技術。我喜歡看排序標準 - 至少在調試 - 所以我把它放在SELECT列表。如果您願意,也可以將其隱藏在ORDER BY子句中。
啊呀,我可以打字不夠快。目前的問題是否真的涉及到「SYSDATE」或「CURRENT_DATE」?我的解釋是它是第一句中提到的三列之一。 – 2012-02-20 08:07:40