ВЫБОР пользователя с самым ранним временем и объединение с другими данными
-
20-09-2019 - |
Вопрос
У меня есть база данных Oracle, где я пытаюсь выбрать user
поле из самой ранней строки (на основе time
поле), где выполняются определенные условия, и я не знаю, как это сделать.Вот суть моего запроса:
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'
Моя проблема в том, что я не знаю, как ВЫБРАТЬ user
и получить только значение из строки с самым ранним time
значение, соответствующее условиям WHERE.Я не думаю, что смогу использовать HAVING
поскольку я не выполняю никаких агрегатных функций в своем SELECT.Раннее time
необходимо применить условие значения только к выбору user
поле, т.е.Я хочу id
и value
быть выбранным для все ценности time
поле.
Я думал, что могу сохранить оператор SELECT, который у меня есть выше, а затем ПРИСОЕДИНИТЬСЯ к другому оператору SELECT, который получает конкретный user
Я хочу.
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
)
Однако это получает только одно значение для user
вообще, и должна быть отдельная user
ценность для каждого id
SELECTed в моем первом запросе.Как мне ограничить свой SELECT user
запрос по другому запросу id
поле?Это вообще правильный подход, чтобы получить то, что я хочу?
Решение
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'