2012-01-04 16 views
5

मैं seldomly एसक्यूएल का उपयोग करें और मैं अपने संग्रह तो मैं इस सरल प्रश्न सवाल पूछ रहा हूँ में इसी तरह कुछ भी नहीं मिल सकता है: मैं एक प्रश्न जो एक रिटर्न 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 

पी.एस: सूचना एसक्यूएल सीई 4

उत्तर

10

तो seenID बढ़ जाती है के रूप में अपने seenTime बढ़ जाती है:

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

अद्यतन के लिए आर एक अन्य मामले:

अगर ऐसा नहीं है, और आप वास्तव में seenTime कि न्यूनतम seenID के साथ मेल खाती चाहते (यह मानते हुए 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 
+0

धन्यवाद! यह के रूप में मैं उम्मीद ... आसान है मैं मैक्स कई बार उपयोग किया है लेकिन मिन ... 06:00 की वजह से –

-1

अपने एसक्यूएल में जोड़ना।

और जहां मौजूद नहीं (1 चयन personAttendances t2 से जहां t.personID = t2.personID और t2.seenID < t.seenID)

0

आपने देखा समय से ऑर्डर करने के लिए देखा आईडी द्वारा नहीं की जरूरत है:

PARTITION BY seenID ORDER BY seenTime 
6

आप इसे रास्ता बना रहे हैं भी मुश्किल:

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

। धन्यवाद! –