質問

セッションのテーブルがあります。各セッションには「session_start_time」と「session_end_time」があります。セッションが開いている間は、終了時刻は空です。セッションのリストを取得し、次のロジックに従って並べ替えたいと考えています。

  1. セッションが開いている場合(終了時間なし)、開始時間までに注文してください。
  2. 終了時間の場合は終了時間までにご注文ください。

何かのようなもの:

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

クエリには JPA と JPQL を使用し、実行には Hibernate を使用しています。あなたは何をお勧めします?

注記:CASE を SELECT に追加するのではなく、不要なフィールドを追加せずにセッションのリストを取得できるように、SELECT をクリーンな状態に保ちたいと考えています。

役に立ちましたか?

解決

NVL BY ORDER(session_end_time、session_start_time)

NVLはOracleの機能です。私は他のDBMSのためにそのような機能があるTHER確信している。

休止状態のため、この1が見つかりました: HIBERNATEでNVL: HQL

でNVLをシミュレートする方法

ORDER BY: https://forum.hibernate.org/ viewtopic.php?F = 25&T = 997220&スタート= 0

他のヒント

ない

ORDER BY CASE 
    WHEN session_end_time IS NULL THEN session_start_time 
    ELSE session_end_time 
END 
あなたのDBMSで

仕事?これは、フィールドを追加しません。

それ以外の場合は、あなたがネストされたクエリ内でそれを計算することができますが、最終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