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 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?

Foi útil?

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'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top