web-dev-qa-db-fra.com

SQL: Notre première occurrence

J'utilise rarement SQL et je ne trouve rien de similaire dans mes archives, je demande donc à cette question de requête simple: j'ai besoin d'une requête laquelle on revient Personid et seulement le premier Seentime

enregistrements :

seenID | personID | seenTime
   108      3         13:34
   109      2         13:56
   110      3         14:22
   111      3         14:31
   112      4         15:04
   113      2         15:52

Résultat recherché :

personID | seenTime
   3         13:34
   2         13:56
   4         15:04

C'est ce que j'ai fait et échoué:

SELECT t.attendanceID, t.seenPersonID, t.seenTime
(SELECT ROW_NUMBER() OVER (PARTITION BY seenID ORDER BY seenID) AS RowNo,
seenID,
seenPersonID,
seenTime
FROM personAttendances) t
WHERE t.RowNo=1

P.S: AVIS SQL CE 4

9
Nime Cloud

Si votre SEENTTime augmente, comme cela augmente:

select personID, min(seenTime) as seenTime
from personAttendances
group by personID

Mise à jour pour un autre cas:

Si ce n'est pas le cas, et que vous voulez vraiment que la SEENTTime correspond au minimum sur lequel vu (en supposant que ce soit unique):

select a.personID, a.seenTime
from personAttendances as a
    join (
        -- Get the min seenID for each personID
        select personID, min(seenID) as seenID
        from personAttendances
        group by personID
    ) as b on a.personID = b.personID
where a.seenID = b.seenID
20
Tim Lehner

Vous devez commander par le temps vu non par l'identifiant vu:

PARTITION BY seenID ORDER BY seenTime
0
Petar Ivanov
0
gilad mayani