17

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:SQLCE4に注意してください

4

5 に答える 5

32

sawedIDが増加するにつれて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
于 2012-01-04T15:31:28.400 に答える
15

あなたはそれをあまりにも難しくしています:

select personID, min(seenTime)
from personAttendances
group by personID
于 2012-01-04T15:31:42.867 に答える
-1

閲覧 ID ではなく、閲覧時間で注文する必要があります。

PARTITION BY seenID ORDER BY seenTime
于 2012-01-04T15:30:46.563 に答える
-2

これを SQL に追加します。

and where not exists
    (select 1 from personAttendances t2 
    where t.personID=t2.personID 
    and t2.seenID < t.seenID)
于 2012-01-04T15:30:37.360 に答える