यह एक 3 चरण की प्रक्रिया है, पहले ROW_NUMBER()
का उपयोग करके प्रत्येक खाते/मीटर संयोजन के लिए अपने रिकॉर्ड को रैंक करेंSELECT *,
RowNumber = ROW_NUMBER() OVER(PARTITION BY AccountNumber, MeterNumber
ORDER BY EndDate DESC)
FROM Meter
आउटपुट
AccountNumber | MeterNumber | <वें शैली="पाठ्य-संरेखण:केंद्र;">आरंभ तिथिसमाप्ति तिथि | <वें शैली="पाठ्य-संरेखण:केंद्र;">दरकोडRowNumber | ||
---|---|---|---|---|---|
0142628117 | 123470203 | 2020-04-22 | 9999-12-31 | ETF0_APR20 | 1 |
0142628117 | 123470203 | 2019-04-10 | 2020-04-09 | ***कस्टम*** | 2 |
0142628117 | 123470205 | 2020-04-22 | 9999-12-31 | ETF0_APR20 | 1 |
0142628117 | 123470205 | 2019-04-10 | 2020-04-09 | ***कस्टम*** | 2 |
1363445 | 105238304 | 2018-10-02 | 2019-08-11 | ***कस्टम*** | 1 |
1363445 | 105238304 | 2016-02-25 | 2016-04-22 | ***कस्टम*** | 2 |
1363445 | 130359929 | 2019-08-12 | 9999-12-31 | ***कस्टम*** | 1 |
<उप> नायब कुछ डेटा को बेहतर दिखाने के लिए छोटा किया गया उप>
फिर आप प्रत्येक मीटर के लिए नवीनतम समाप्ति तिथि प्राप्त करने के लिए RowNumber =1 के लिए फ़िल्टर कर सकते हैं।
इसके बाद आपको अलग-अलग EndDate/RateCode संयोजनों की गणना करने की आवश्यकता है, आप COUNT(DISTINCT ...)
का उपयोग नहीं कर सकते हैं विंडो वाले फ़ंक्शन में, हालांकि आप DENSE_RANK()
. का उपयोग करके इसका अनुकरण कर सकते हैं :
SELECT *,
CntDistinct = DENSE_RANK() OVER(PARTITION BY AccountNumber
ORDER BY EndDate, RateCode)
+ DENSE_RANK() OVER(PARTITION BY AccountNumber
ORDER BY EndDate DESC, RateCode DESC) - 1
FROM ( SELECT *,
RowNumber = ROW_NUMBER() OVER(PARTITION BY AccountNumber, MeterNumber
ORDER BY EndDate DESC)
FROM Meter AS m
) AS m
WHERE m.RowNumber = 1;
आउटपुट
AccountNumber | MeterNumber | <वें शैली="पाठ्य-संरेखण:केंद्र;">आरंभ तिथिसमाप्ति तिथि | <वें शैली="पाठ्य-संरेखण:केंद्र;">दरकोडCntDistinct | ||
---|---|---|---|---|---|
0142628117 | 123470203 | 2020-04-22 | 9999-12-31 | ETF0_APR20 | 1 |
0142628117 | 123470205 | 2020-04-22 | 9999-12-31 | ETF0_APR20 | 1 |
1363445 | 130359929 | 2019-08-12 | 9999-12-31 | ***कस्टम*** | 2 |
1363445 | 105238304 | 2018-10-02 | 2019-08-11 | ***कस्टम*** | 2 |
<उप> नायब कुछ डेटा को बेहतर दिखाने के लिए छोटा किया गया उप>
अंत में यह सब एक और सबक्वायरी में डालें और उस स्थान तक सीमित करें जहां EndDate/RateCode का एक से अधिक अद्वितीय संयोजन है:
SELECT AccountNumber, MeterNumber, StartDate, EndDate, RateCode
FROM ( SELECT *,
CntDistinct = DENSE_RANK() OVER(PARTITION BY AccountNumber
ORDER BY EndDate, RateCode)
+ DENSE_RANK() OVER(PARTITION BY AccountNumber
ORDER BY EndDate DESC, RateCode DESC) - 1
FROM ( SELECT *,
RowNumber = ROW_NUMBER() OVER(PARTITION BY AccountNumber, MeterNumber
ORDER BY EndDate DESC)
FROM Meter AS m
) AS m
WHERE m.RowNumber = 1
) AS m
WHERE m.CntDistinct > 1;
आउटपुट
AccountNumber | MeterNumber | <वें शैली="पाठ्य-संरेखण:केंद्र;">आरंभ तिथिसमाप्ति तिथि | <वें शैली="पाठ्य-संरेखण:केंद्र;">दरकोड||
---|---|---|---|---|
0500000178767001363445 | TCA105238304 | 2018-10-02 | 2019-08-11 | ***कस्टम*** |
0500000178767001363445 | TCA130359929 | 2019-08-12 | 9999-12-31 | ***कस्टम*** |