2012-01-04 30 views
5

tôi seldomly sử dụng SQL và tôi không thể tìm thấy bất cứ điều gì tương tự trong kho lưu trữ của tôi vì vậy tôi đặt câu hỏi truy vấn đơn giản này: Tôi cần một truy vấn mà người ta trả PersonId và chỉ có seenTime đầu tiênSQL: Chỉ trở lại đầu tiên xảy ra

Records:

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 

Wanted kết quả:

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

Đó là những gì tôi đã làm & thất bại:

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 

Tái bút: Thông báo SQL CE 4

Trả lời

10

Nếu seenTime của bạn tăng lên khi tăng seenID:

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

cập nhật fo r trường hợp khác:

Nếu đây không phải là trường hợp, và bạn thực sự muốn seenTime tương ứng với seenID tối thiểu (giả sử seenID là duy nhất):

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 
+0

Cảm ơn! Nó đơn giản như tôi mong đợi ... Tôi đã sử dụng MAX nhiều lần nhưng MIN ... –

-1

thêm video này vào sql của bạn.

và nơi không tồn tại (chọn 1 từ personAttendances t2 nơi t.personID = t2.personID và t2.seenID < t.seenID)

0

Bạn cần đặt hàng theo thời gian thấy không bằng id thấy:

PARTITION BY seenID ORDER BY seenTime 
6

Bạn đang làm cho nó cách quá khó khăn:

select personID, min(seenTime) 
from personAttendances 
group by personID 
+0

Vì 6 giờ chiều. Cảm ơn! –

Các vấn đề liên quan