Pregunta

Tengo una tabla de Sesiones. Cada sesión tiene "session_start_time" y "session_end_time". Aunque la sesión está abierta, la hora de finalización está vacía. Quiero buscar a la lista de sesiones, y el orden que por la lógica siguiente:

  1. Si la sesión está abierta (sin hora de finalización), ordenado por la hora de inicio.
  2. Si la sesión se cierra, por fin la hora de finalización.

Algo así como:

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

Estoy usando JPA y JPQL para las consultas, y el uso de Hibernate para la ejecución. ¿Qué recomendaría usted?

Nota: : Yo prefiero no añadir caso a la SELECT, sino que mantenerlo limpio por lo que obtener una lista de sesiones sin campos innecesarios adicionales.

¿Fue útil?

Solución

ORDER BY NVL (session_end_time, session_start_time)

NVL es una función de Oracle. Estoy seguro de que allí son funciones como la de otros DBMS

Encontrados éste para hibernación: NVL en hibernación: cómo simular NVL en HQL

ORDER BY: https://forum.hibernate.org/ viewtopic.php? f = 25 & t = 997220 & start = 0

Otros consejos

¿Tiene

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

trabajo en su DBMS? Que no añade un campo.

De lo contrario se puede calcular que el interior de una consulta anidada, pero no es necesario incluirla en la cláusula SELECT final:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top