Oracleでは、日付、開始時刻が&の3つの列があり、次のように並べ替える必要があります。時間ベースのOracleでの列のソート
現在の時刻が開始時刻と終了時刻の間にある場合は、その行が先頭に来る必要があります。それ以外の場合は、通常の昇順でソートする必要があります。
今の私のクエリは、ソートしながら、私は考慮に現在の時間を取ることができますどのようにこの
select * from details order by date,start_time
のように見えますか?
Oracleでは、日付、開始時刻が&の3つの列があり、次のように並べ替える必要があります。時間ベースのOracleでの列のソート
現在の時刻が開始時刻と終了時刻の間にある場合は、その行が先頭に来る必要があります。それ以外の場合は、通常の昇順でソートする必要があります。
今の私のクエリは、ソートしながら、私は考慮に現在の時間を取ることができますどのようにこの
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」を意味し、「通常の昇順でソートされた」と仮定すると、あなたが何か他のものを意味する場合は、
SELECT *
FROM details
ORDER BY (CASE WHEN sysdate BETWEEN start_time AND end_time
THEN 1
ELSE 0
END) desc,
start_time asc
のような何かができる「の昇順でのstart_timeでソート」を意味している場合いくつかのサンプルデータと期待される出力が間違いなく助けになるでしょう。
構文を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句に隠しておくこともできます。
Blimey、私は十分に速く入力することはできません。現在の質問は本当に 'SYSDATE'や' CURRENT_DATE'を参照していますか?私の解釈は、それが最初の文で言及された3つの列のうちの1つであるということでした。 –