Tsql-अधिकतम और अधिक से अधिक जानकारी के साथ संपूर्ण पंक्ति प्राप्त करें



sql-server group-by (2)

SQL सर्वर 2005 या इसके बाद के संस्करण के साथ, आप निम्न कर सकते हैं:

SELECT x.*
FROM (
 SELECT *,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY value DESC, date DESC) AS RN
 FROM table
) x
WHERE x.RN = 1

https://src-bin.com

मेरे पास निम्न स्तंभों के साथ एक टेबल है:

PK1   PK2   ID   DATE    Value  flag

मैं एक गणना करता हूं जिसमें प्रति आईडी अधिकतम मूल्य लेना शामिल होता है

  select id,
         max(value) 
    from table 
group by id

मैं उन पंक्तियों पर फ़्लैग चिह्नित करना चाहता हूं जो मैं उपयोग कर रहा हूं। यदि आईडी और अधिकतम (मान) एकाधिक पंक्तियों के अनुरूप हैं, तो अधिकतम दिनांक वाले को ध्वजांकित करें। यदि उनके पास एक ही आईडी, अधिकतम (मान) और अधिकतम (तारीख) ध्वज उन पंक्तियों में से एक है (उस समय पर ध्यान न दें)

कोई विचार?

धन्यवाद!


Answer #1

SQL2005 के लिए + शायद ऐसा कुछ (मान लें कि "मार्क" का अर्थ है ध्वज स्तंभ अपडेट करना)

WITH cte AS
(
SELECT PK1, PK2, ID, DATE, Value, flag,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY value desc, date desc) AS RN
FROM table 
)
UPDATE cte
SET flag=CASE WHEN RN=1 THEN 1 ELSE 0 END




grouping