Вопрос

У меня есть стол сеансов. Каждое сеанс имеет «Session_Start_Time» и «Session_end_Time». Пока сеанс открыт, время окончания пусто. Я хочу получить список сессий и заказывать его по следующей логике:

  1. Если сеанс открыт (нет времени окончания), порядок к началу времени.
  2. Если сеанс закрыт, порядок к концу времени.

Что-то типа:

 ORDER BY (session_end_time == null) ? session_start_time : session_end_time

Я использую JPA и JPQL для запросов и используя Hibernate для выполнения. Что бы вы порекомендовали?

ПРИМЕЧАНИЕ: Я предпочел бы не добавить корпус к выбору, но вместо этого держите его в чистоте, поэтому я получаю список сеансов без дополнительных ненужных полей.

Это было полезно?

Решение

Заказ от NVL (Session_end_time, Session_start_time)

NVL - функция Oracle. Я уверен, что есть такие функции для других СУБД

Нашел этот для Hibernate: NVL в Hibernate: Как имитировать NVL в HQL

СОРТИРОВАТЬ ПО: https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0.

Другие советы

Делает

ORDER BY CASE 
    WHEN session_end_time IS NULL THEN session_start_time 
    ELSE session_end_time 
END 

Работа в вашем СУБД? Это не добавляет поле.

В противном случае вы можете рассчитать его внутри вложенного запроса, но не включайте его в финал SELECT пункт:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top