Сортировка столбца в Oracle по времени - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь выполнить сортировку другого типа в Oracle. Как будто у меня есть три столбца, а именно Дата, Время начала и Время окончания, и мне нужно отсортировать столбец следующим образом.

Если текущее время находится в промежутке между временем начала и временем окончания, то эта строка должна располагаться наверху. В противном случае она должна быть отсортирована в порядке возрастания.

Прямо сейчас мой запрос выглядит так

select * from details order by date,start_time

Как можно учитывать текущее время при сортировке?

Ответы [ 3 ]

4 голосов
/ 20 февраля 2012

Первая идея, которая пришла мне в голову:

SELECT *
FROM   details
ORDER  BY ( CASE WHEN date_column BETWEEN start_time AND end_time THEN 0 ELSE 1 END )
        , date_column
        , start_time;
4 голосов
/ 20 февраля 2012

Если «текущее время» означает «sysdate», и если предположить, что «отсортировано по обычному возрастанию» означает «сортировать по времени начала / времени в порядке возрастания», вы можете сделать что-то вроде

SELECT *
  FROM details
 ORDER BY (CASE WHEN sysdate BETWEEN start_time AND end_time 
                THEN 1
                ELSE 0
            END) desc,
          start_time asc

Если вы имеете в виду что-то еще, некоторые данные образца и ожидаемый результат определенно помогут.

1 голос
/ 20 февраля 2012

Возможно, вам потребуется настроить синтаксис в 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, если хотите.

...