私は、NULLでない日付フィールドを持つイベントテーブルを持っています。ピボット日付とオフセットに基づいて、クエリは次の2つのイベントを返す必要があります。結合内の空サブクエリのテスト
は、ここで私が構築しようとしているクエリです:日付ASCでソートされた次のイベントシーケンスと
SELECT e.* FROM Events as e
JOIN (
-- latest event before pivot date, with offset
SELECT * FROM Events where date < :dateRef
ORDER BY date DESC, id DESC LIMIT :offset,1
) as eLatest
-- depending on :dateRef and :offset, eLatest can be empty!
-- If eLatest is empty, the join should produce all rows from Events table.
-- "eLatest is null" gives an error... How can I do it?
ON e.date > eFirst.date || (e.date = eFirst.date && e.id >= eFirst.id)
ORDER BY e.date, e.id LIMIT 2
(無等しい日付がそれをシンプルに保つないため): E0を - E1 - E2を - .. 。
- :dateRef = e2.date:オフセット= 0: - ここでE10
は、いくつかの所望の結果である[E1、E2]
- :デートEF = e2.date:オフセット= 1:[E0、E1]
- :dateRef = e2.date:オフセット> 1:動作しない[E0、E1] <は---、何行を返さない
- :dateRef < = e0.date、:offset =? :=オフセットdateRef = e5.date、:オフセット= 2:E2、E3]
- :dateRef> e10.date、[E0、E1] < ---動作しないが、何行
- を返しません0:[E10]
- :dateRef> e10.date、:= 2オフセット:[E8、E9]
私が持っている問題は、サブクエリeLatest
が空のときということで、参加決してマッチしません。 eLatest
が空のときに結合条件を削除する方法を理解できません。
最終クエリはJPQLまたはJPAの基準でなんとかなければなりません(そう何の組合が!私はすでにUNIONで動作するクエリを持っていないし、それを取り除くしようとしています...)
'JOIN'の代わりに' LEFT JOIN'を実行するとどうなりますか? – Lamak
'JOIN'を' LEFT JOIN'に置き換えると、クエリは常にe0とe1を返します。 – bernie
私はあなたの最後の箇条書き項目は、*:dateRef> e10.date、:offset = 2:[e8、** e9 **] *と読みます。 –