यह मानते हुए कि create_time में ऑर्डर बनाने का समय शामिल है, और आप चाहते हैं कि 100 क्लाइंट नवीनतम ऑर्डर के साथ हों, आप यह कर सकते हैं:
- अपनी अंतरतम क्वेरी में create_time जोड़ें
- अपनी बाहरी क्वेरी के परिणामों को
create_time desc
. द्वारा क्रमित करें - एक बाहरीतम क्वेरी जोड़ें जो
ROWNUM
. का उपयोग करके पहली 100 पंक्तियों को फ़िल्टर करती है
प्रश्न:
SELECT * FROM (
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn=1
ORDER BY create_time desc
) WHERE rownum <= 100
Oracle 12c के लिए अद्यतन करें
रिलीज़ 12.1 के साथ, Oracle ने "असली" टॉप-एन क्वेरीज़
पेश कीं। . नए FETCH FIRST...
. का उपयोग करना सिंटैक्स, आप इसका भी उपयोग कर सकते हैं:
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn = 1
ORDER BY create_time desc
FETCH FIRST 100 ROWS ONLY)