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

समय अवधि का उपयोग करके समान मान की लगातार पंक्तियों को समूहित करें

यदि आप SQLServer 2012 या इससे बेहतर का उपयोग कर रहे हैं तो आप LAG . का उपयोग कर सकते हैं किसी कॉलम का पिछला मान प्राप्त करने के लिए, फिर SUM() OVER (ORDER BY ...) एक रोलिंग योग बनाने के लिए, इस मामले में एक जो कोर्सनाम के परिवर्तन की गणना करता है, जिसे GROUP BY के रूप में उपयोग किया जा सकता है एंकर

With A AS (
  SELECT ClassRoom
       , CourseName
       , StartTime
       , EndTime
       , PrevCourse = LAG(CourseName, 1, CourseName) OVER (ORDER BY StartTime)
  FROM   Table1
), B AS (
  SELECT ClassRoom
       , CourseName
       , StartTime
       , EndTime
       , Ranker = SUM(CASE WHEN CourseName = PrevCourse THEN 0 ELSE 1 END)
                OVER (ORDER BY StartTime, CourseName)
  FROM   A
)
SELECT ClassRoom
     , CourseName
     , MIN(StartTime) StartTime
     , MAX(EndTime) EndTime
FROM   B
GROUP BY ClassRoom, CourseName, Ranker
ORDER BY StartTime

SQLFiddle डेमो



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सीलिंग () SQL सर्वर में उदाहरण

  2. डेटाबेस में सभी संग्रहीत प्रक्रियाओं पर उपयोगकर्ता के लिए अनुमति निष्पादित करें?

  3. SQL सर्वर - क्वेरी शॉर्ट-सर्किटिंग?

  4. एडीओ पैरामीटरयुक्त क्वेरी के साथ चर @myvariable त्रुटि घोषित करनी चाहिए

  5. sql सर्वर आपके डेटा को कैसे सॉर्ट करता है?