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
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
Vous devez commander par le temps vu non par l'identifiant vu:
PARTITION BY seenID ORDER BY seenTime
pour PostgreSQL Il y a distinct sur