Pergunta

Eu tenho uma tabela de sessões. Cada sessão possui "session_start_time" e "session_end_time". Enquanto a sessão está aberta, o horário de término está vazio. Quero buscar a lista de sessões e encomendá -la pela seguinte lógica:

  1. Se a sessão estiver aberta (sem horário de término), encomende até o horário de início.
  2. Se a sessão estiver fechada, encomende até o final da hora.

Algo como:

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

Estou usando o JPA e o JPQL para as consultas e usando o Hibernate para a execução. O que você recomendaria?

NOTA: Prefiro não adicionar um caso à seleção, mas mantê -lo limpo, para que eu receba uma lista de sessões sem campos desnecessários adicionais.

Foi útil?

Solução

Ordem por nvl (session_end_time, session_start_time)

NVL é uma função Oracle. Tenho certeza de que existem funções como essa para outros DBMs

Encontrei este para Hibernate: NVL em Hibernate: Como simular o NVL no HQL

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

Outras dicas

Faz

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

trabalhar no seu DBMS? Isso não adiciona um campo.

Caso contrário, você pode calculá -lo dentro de uma consulta aninhada, mas não a inclua na final SELECT cláusula:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top