Auswählen Benutzer mit frühestmöglichen Zeitpunkt und mit anderen Datenverbindungs
-
20-09-2019 - |
Frage
Ich habe eine Oracle-Datenbank, wo ich versuche, ein user
Feld aus der frühesten Zeile auszuwählen (basierend auf einem time
Feld), wenn bestimmte Voraussetzungen erfüllt sind, und ich weiß nicht, wie es zu tun. Hier ist der Kern meiner Abfrage:
SELECT id,
CASE WHEN value = 'xyz'
THEN 'Pending'
ELSE 'Not Pending'
END AS status,
time
FROM table1
INNER JOIN ...
WHERE subject IN (...) AND
field = 'Status'
Mein Problem ist, ich weiß nicht, wie user
auswählen und nur den Wert aus der Zeile mit der frühesten time
Wert Anpassung der WHERE-Bedingungen erhalten. Ich glaube nicht, dass ich HAVING
verwenden kann, da ich keine Aggregatfunktionen in meinem SELECT zu tun. Die ‚früheste time
Wert‘ Bedingung Bedürfnisse anwenden nur , um die Auswahl des user
Feld, also ich will id
und value
für zu wählende alle Werte des time
Feld.
Ich dachte, ich die SELECT-Anweisung halten könnte ich oben und dann JOIN mit anderen SELECT-Anweisung, die die bestimmte user
bekommt ich will.
SELECT id, status, time, user
FROM (
...query above...
),
(
SELECT user
FROM table1
WHERE subject in (...) AND
field = 'Status' AND
ROWNUM = 1
ORDER BY time ASC
)
Dies ist jedoch wird nur einen Wert für user
Gesamt, und es soll ein separater user
Wert für jede id
in meiner ersten Abfrage ausgewählt werden. Wie kann ich meine SELECT user
Abfrage durch die andere Abfrage id
Feld begrenzen? Ist dies auch der richtige Ansatz zu bekommen, was ich will?
Lösung
SELECT id,
CASE WHEN value = 'xyz'
THEN 'Pending'
ELSE 'Not Pending'
END AS status,
time,
FIRST_VALUE(user) OVER (PARTITION BY id ORDER BY time) AS first_user
FROM table1
INNER JOIN
...
WHERE subject IN (...) AND
field = 'Status'