私はめったにSQLを使用せず、アーカイブ内で同様のものを見つけることができないので、この簡単なクエリの質問をします:personIDを返し、最初のseenTimeのみを返すクエリが必要です
レコード:
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
希望する結果:
personID | seenTime
3 13:34
2 13:56
4 15:04
それが私がやったことで失敗しました:
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
PS:SQL CE 4に注意してください
SeenIDが増えると、seenTimeが増える場合:
select personID, min(seenTime) as seenTime
from personAttendances
group by personID
別のケースの更新:
これが当てはまらず、最小のseenIDに対応するseenTimeが本当に必要な場合(seenIDが一意であると想定):
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
あなたはそれを作っていますway難しすぎます:
select personID, min(seenTime)
from personAttendances
group by personID
あなたは見たIDではなく見た時間で注文する必要があります:
PARTITION BY seenID ORDER BY seenTime
PostgreSQL の場合 DISTINCT ON があります