2012-02-20 71 views
0

我想一個別樣Oracle.Its排序像我有三列,即日期,開始時間&結束時間,我需要在以下方式排序列在Oracle中的一列。排序基於時間

如果當前時間爲開始時間和結束時間之間則該行應該來@它應該通過正常的升序進行排序top.Otherwise。

現在我的查詢看起來像這樣

select * from details order by date,start_time 

我如何利用當前的時間考慮,而排序?

回答

4

是來到我的腦海裏第一個念頭:

SELECT * 
FROM details 
ORDER BY (CASE WHEN date_column BETWEEN start_time AND end_time THEN 0 ELSE 1 END) 
     , date_column 
     , start_time; 
+0

啊呀,我可以打字不夠快。目前的問題是否真的涉及到「SYSDATE」或「CURRENT_DATE」?我的解釋是它是第一句中提到的三列之一。 – 2012-02-20 08:07:40

4

如果「當前時間」的意思是「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 

的東西,如果你的意思是別的東西,一些樣本數據和預期的產出肯定會有所幫助。

1

您可能需要調整的語法到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子句中。