Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

समूहीकरण और गिनती

आप निम्न का उपयोग कर सकते हैं:

SELECT  Team, TotalWins, FirstWin, LastWin
FROM    (   SELECT  Team, 
                    WL,
                    COUNT(*) TotalWins,
                    MIN("Date") FirstWin,
                    MAX("Date") LastWin,
                    ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY COUNT(*) DESC) RowNumber
            FROM    (   SELECT  Team,
                                "Date",
                                WL, 
                                ROW_NUMBER() OVER(PARTITION BY Team ORDER BY "Date") - ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY "Date") Grouping
                        FROM    T
                    ) GroupedData
            WHERE   WL = 'W'
            GROUP BY Team, WL, Grouping
        ) RankedData
WHERE   RowNumber = 1;

यह टीम द्वारा विभाजित प्रत्येक गेम को रैंक करने के लिए ROW_NUMBER का उपयोग करता है, और परिणाम के अनुसार, इन दोनों के बीच का अंतर लगातार परिणामों के प्रत्येक समूह के लिए अद्वितीय है। तो आपकी पहली टीम के लिए आपके पास होगा:

Team    Date        W/L RN1     RN2 DIFF
Team_1  04/01/0012  W   1       1   0
Team_1  06/01/0012  W   2       2   0
Team_1  07/01/0012  L   3       1   2
Team_1  14/01/0012  W   4       3   1
Team_1  19/01/0012  W   5       4   1
Team_1  30/01/0012  L   6       2   4
Team_1  14/02/0012  W   7       5   2
Team_1  17/02/0012  L   8       3   5
Team_1  20/02/0012  W   9       6   3

जहां RN1 को केवल टीम द्वारा विभाजित किया जाता है, और rn2 टीम और परिणाम द्वारा विभाजन होता है।

जैसा कि आप देख सकते हैं, यदि आप घाटे को हटाते हैं तो लगातार जीत के प्रत्येक समूह के लिए DIFF कॉलम एक से बढ़ जाता है:

Team    Date        W/L RN1     RN2 DIFF
Team_1  04/01/0012  W   1       1   0
Team_1  06/01/0012  W   2       2   0
---------------------------------------
Team_1  14/01/0012  W   4       3   1
Team_1  19/01/0012  W   5       4   1
---------------------------------------
Team_1  14/02/0012  W   7       5   2
---------------------------------------
Team_1  20/02/0012  W   9       6   3

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

SQL Fiddle पर उदाहरण




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA + StoredProcedureCall + ऑब्जेक्ट प्रकार IN पैरामीटर

  2. Oracle STANDARD_HASH PLSQL में उपलब्ध नहीं है?

  3. लगातार रिकॉर्ड समूहबद्ध करने के लिए Oracle SQL क्वेरी

  4. Oracle 11g बाइंड चर मौजूद नहीं है

  5. इवेंट को विंडोज इवेंट लॉग में ओरेकल के साथ रखें