Domanda

Ho una tabella delle Sessioni.Ogni sessione è "session_start_time" e "session_end_time".Mentre la sessione è aperta, l'ora di fine è vuoto.Voglio recuperare l'elenco delle sessioni, e l'ordine con la seguente logica:

  1. Se la seduta è aperta (non un fine), ordine ora di inizio.
  2. Se la sessione è chiusa, ordine entro la fine del tempo.

Qualcosa di simile a:

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

Sto usando JPA e JPQL per le query, e l'utilizzo di Hibernate per l'esecuzione.Che cosa mi consiglia?

NOTA:Piuttosto, non vorrei aggiungere in CASO di selezione, ma invece di tenerlo pulito in modo da ottenere un elenco di sessioni senza ulteriori inutili campi.

È stato utile?

Soluzione

ORDINE nvl(session_end_time, session_start_time)

nvl è una funzione di Oracle.Sono sicuro che ci sono funzioni come per gli altri DBMS

Trovato questo per la sospensione:nvl in SOSPENSIONE: Come simulare NVL in HQL

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

Altri suggerimenti

Non

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

lavoro nel DBMS?Che non aggiunge un campo.

Altrimenti si può calcolare che all'interno di una query nidificata, ma non comprende nel finale SELECT clausola:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top