2008-10-09 14 views
85

द्वारा पंक्तियों का चयन निम्नलिखित क्वेरी और परिणामों का उपयोग करके, मैं सबसे हालिया प्रविष्टि की तलाश में हूं जहां चार्जआईड और चार्जटाइप अद्वितीय हैं।एसक्यूएल हालिया तारीख

select chargeId, chargeType, serviceMonth from invoice 

    CHARGEID CHARGETYPE SERVICEMONTH 
1 101  R  8/1/2008 
2 161  N  2/1/2008 
3 101  R  2/1/2008 
4 101  R  3/1/2008 
5 101  R  4/1/2008 
6 101  R  5/1/2008 
7 101  R  6/1/2008 
8 101  R  7/1/2008 

वांछित:

CHARGEID CHARGETYPE SERVICEMONTH 
1 101  R  8/1/2008 
2 161  N  2/1/2008 

उत्तर

121

आप प्रकार और आईडी से समूह आइटम के लिए द्वारा एक ग्रुप उपयोग कर सकते हैं। फिर आप सबसे हालिया सेवा माह प्राप्त करने के लिए MAX() कुल फ़ंक्शन का उपयोग कर सकते हैं। नीचे एक परिणाम ChargeId, ChargeType, और MostRecentServiceMonth

SELECT 
    CHARGEID, 
    CHARGETYPE, 
    MAX(SERVICEMONTH) AS "MostRecentServiceMonth" 
FROM INVOICE 
GROUP BY CHARGEID, CHARGETYPE 
+4

यह बिल्कुल सही है:

सरल में आप द्वारा इस लक्ष्य को हासिल कर सकते हैं। धन्यवाद! – jgreep

+1

यदि आप इसे डाउनस्ट्रीम की आवश्यकता हो तो MAX (serviceMonth) फ़ील्ड को उपनाम करना न भूलें। –

+2

ठीक है, तो क्या होता है यदि कोई पंक्ति 101 एन 1/1/2008 तालिका में क्या होती है? – tvanfosson

6
SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
FROM invoice 
GROUP BY chargeId, chargeType 
41

के साथ सेट देता है तो यह नहीं है क्या निवेदक के लिए पूछ रहा था, लेकिन यह "सबसे हाल ही में दिनांक के आधार पर एसक्यूएल का चयन पंक्तियाँ" करने के लिए जवाब है।

http://wiki.lessthandot.com/index.php/Returning_The_Maximum_Value_For_A_Row

SELECT t.chargeId, t.chargeType, t.serviceMonth FROM( 
    SELECT chargeId,MAX(serviceMonth) AS serviceMonth 
    FROM invoice 
    GROUP BY chargeId) x 
    JOIN invoice t ON x.chargeId =t.chargeId 
    AND x.serviceMonth = t.serviceMonth 
+0

धन्यवाद! यह वही है जिसे मैं देख रहा था! – Diana

+0

विचारों के साथ संगत प्रतीत नहीं होता है। – Nuzzolilo

-1
select to.chargeid,t0.po,i.chargetype from invoice i 
inner join 
(select chargeid,max(servicemonth)po from invoice 
group by chargeid)t0 
on i.chargeid=t0.chargeid 

अगर अलग प्रभारी आईडी अलग chargetype combinations.Hope इस सरल प्रश्न को ध्यान में थोड़ा प्रदर्शन समय के साथ मदद करता है है ऊपर क्वेरी काम करेंगे से संशोधित ...

2

मैं देखता हूं कि अधिकांश डेवलपर्स विशाल डेटा पर इसका असर डाले बिना इनलाइन क्वेरी का उपयोग करते हैं।

select a.chargeId, a.chargeType, a.serviceMonth 
from invoice a 
left outer join invoice b 
on a.chargeId=b.chargeId and a.serviceMonth <b.serviceMonth 
where b.chargeId is null 
order by a.serviceMonth desc 
संबंधित मुद्दे