Domanda

Ho un database Oracle in cui sto cercando di selezionare un campo user fin dalla più tenera fila (sulla base di un campo time) qualora siano soddisfatte determinate condizioni, e non so come farlo. Ecco il succo della mia domanda:

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'

Il mio problema è che non so come selezionare user e ottenere solo il valore dalla riga con il valore time primo corrispondere le condizioni in cui. Non credo che posso usare HAVING visto che non sto facendo alcuna funzione di aggregazione nella mia SELECT. La condizione 'primo valore time' ha bisogno di applicare solo per la selezione del campo user, vale a dire che voglio id e value per essere selezionati per tutti i valori di del campo time.

stavo pensando che potrei mantenere l'istruzione SELECT che ho sopra e poi unirsi con un'altra istruzione SELECT che ottiene il user particolare che voglio.

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
     )

Tuttavia, questo diventa un solo valore per user globale, e ci dovrebbe essere un valore separato per ogni user id selezionato nella prima query. Come faccio a limitare la mia domanda SELECT user dal campo id dell'altro interrogazione? E 'questo anche il giusto approccio per ottenere ciò che voglio?

È stato utile?

Soluzione

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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top