Derby/JavaDB Komplexe Abfrage vereinfachen

Meisenmann

Mitglied
Hi,

in einer Tabelle gibt es einen Start- und einen Endzeitpunkt.

Der Endzeitpunkt kann allerdings in der Zukunft liegen, falls die Transaktion noch nicht beendet ist -> dann ist er NULL.

Wenn ich nun alle Transaktionen innerhalb eines Zeitfensters suche, ergibt sich folgendes "unschönes" pseudo Statement:

Code:
SELECT (CASE
  WHEN end IS NULL THEN CURRENT_TIMESTAMP 
  ELSE end END) AS endneu
FROM mytable
WHERE 
  start BETWEEN x AND y
  OR
  endneu BETWEEN x AND y
  OR
  start < x AND end > y

- x und y sind Start und Ende des zu suchenden Zeitraums als Timestamp

Auf endneu kann ich nicht zugreifen.: In mysql kann ich mir den Inhalt des CASE mit AS merken und an anderen Stellen im Statement verwenden. Irgendwie klappt das mit derby nicht


PS Falls jemand eine bessere Idee hat, wie ich die Datensätze die innerhalb des Zeitraums x und y liegen herausbekomme, wäre das sogar noch besser.


Danke und viele Grüße,
Meisenmann
 
Hi,

versuch es mal so. Ohne Verwendung von CASE, sollte somit auch mit einer Derby DB funktionieren.

SQL:
SELECT start, end FROM mytable
WHERE
start BETWEEN x AND y
OR (
  (end is not null AND end BETWEEN x AND y) 
  OR 
  (end is null and current_timestamp BETWEEN x AND y)
)
OR (
  start < x 
  AND (
    (end is not null and end > y) 
    OR 
    (end is null and current_timestamp > y)
  )
);
 
Hey torsan,

sorry für die späte Antwort. Dachte nicht, dass ich noch eine Antwort bekomme und hab desshalb nach einigen Tagen den Thread nicht mehr besucht.

Funktioniert für mein Vorhaben leider nicht 😀 Ich suche soetwas wie AS, da der Endzeitstempel nicht nur über die o. g. Bedingung, sondern zusätzlich noch über eine Stored Function berechnet wird. Mit dem AS könnte ich mir dann den mehrfachen aufruf dieser Stored Function sparen.


Trozdem danke und viele Güße,
Meisenmann
 

Zurück
Oben