यह सबक्वेरी के बिना भी संभव है:
SELECT DISTINCT
id
,max(round) OVER (PARTITION BY id) AS round
,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM SCORES
WHERE id IN (1,2,3)
ORDER BY id;
ठीक वही लौटाता है जो आपने मांगा था।
महत्वपूर्ण बिंदु यह है कि DISTINCT
बाद लागू किया जाता है विंडो फ़ंक्शन।
एसक्यूएल फिडल।
शायद तेज़ हो क्योंकि यह एक ही विंडो का दो बार उपयोग करता है:
SELECT DISTINCT
id
,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round
,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM SCORES
WHERE id IN (1,2,3)
ORDER BY id;
अन्यथा ऐसा ही कर रहे हैं।