2012-01-04 23 views
5

Ben seyrek SQL kullanmak ve bu yüzden bu basit sorgu soru soruyorum benim arşivde benzer bir şey bulamıyorum: Bir ve sadece ilk seenTime personID döndüren bir sorgu ihtiyacımSQL: Return sadece ilk olay

Kayıtlar:

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 

Aranıyor sonucu:

Ben & yaptık

başarısız oldu:

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.: Uyarı SQL CE 4

cevap

10

ise seenID arttıkça sizin seenTime artar:

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

Güncelleme fo r başka vaka:

bu durum böyle değil ve gerçekten asgari seenID karşılık gelen seenTime istiyorsanız (seenID varsayarak benzersizdir):

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

teşekkürler! Beklediğim gibi ben MAX defalarca kullanılan ama ... basit MİN ... Çünkü 6 de bir –

-1

sizin sql bu ekleyin.

ve Varlığından değil (personAttendances t2 1 seçin t.personID = t2.personID ve t2.seenID < t.seenID) Sen görülen id tarafından görülen zamana kadar sipariş etmek gerekir

0

:

PARTITION BY seenID ORDER BY seenTime 
6

Gün içinde bir çok yolu yapıyoruz çok zor:

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

. Teşekkürler! –

İlgili konular