Selecionando o usuário com tempo mais antigo e juntando -se a outros dados
-
20-09-2019 - |
Pergunta
Eu tenho um banco de dados Oracle onde estou tentando selecionar um user
campo desde a primeira linha (com base em um time
campo) onde certas condições são atendidas e eu não sei como fazê -lo. Aqui está a essência da minha consulta:
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'
Meu problema é que não sei como selecionar user
e obtenha apenas o valor da linha com os primeiros time
valor correspondendo às condições onde. Eu não acho que posso usar HAVING
Como não estou fazendo nenhuma função agregada em minha seleção. O mais cedo time
a condição de valor 'precisa se aplicar só para a seleção do user
campo, ou seja, eu quero id
e value
a ser selecionado para tudo valores do time
campo.
Eu estava pensando que poderia manter a declaração selecionada que tenho acima e depois junte -me a outra declaração selecionada que recebe o particular user
Eu quero.
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
)
No entanto, isso só recebe um valor para user
no geral, e deve haver um separado user
valor para cada um id
Selecionado na minha primeira consulta. Como faço para limitar meu SELECT user
Consulta da outra consulta id
campo? Essa é a abordagem certa para conseguir o que eu quero?
Solução
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'