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

ध्वज चर के आधार पर पंक्ति_नंबर () अनुक्रम को तोड़ें

SQL सर्वर मानते हुए, यहाँ एक उदाहरण है:

DECLARE @T table (id int, [month] char(3), flag bit)

INSERT INTO @T
VALUES
(111, 'jan', 1)
,(111, 'feb', 1)
,(111, 'mar', 1)
,(111, 'apr', 0)
,(111, 'may', 0)
,(111, 'jun', 1)
,(222, 'jan', 1)
,(222, 'feb', 1)
,(222, 'mar', 0)
,(222, 'apr', 0)
,(222, 'may', 0)
,(222, 'jun', 1)

SELECT
    id
    , [month]
    , flag
    , ROW_NUMBER() OVER (PARTITION BY id, section ORDER BY monthNum) [order]
FROM
    (
        SELECT
            id
            , [month]
            , monthNum
            , flag
            , SUM(CASE WHEN newValue = 1 THEN 1 ELSE 0 END) OVER (PARTITION BY id ORDER BY monthNum) section
        FROM
            (
                SELECT
                    id
                    , [month]
                    , monthNum
                    , flag
                    , CASE WHEN LAG(flag, 1, ABS(flag - 1)) OVER (PARTITION BY id ORDER BY monthNum) = flag THEN 0 ELSE 1 END newValue
                FROM
                    (
                        SELECT
                            id
                            , [month]
                            , MONTH(CAST('1 ' + [month] + ' 17' AS datetime)) monthNum
                            , flag
                        FROM @T
                    ) Q
            ) Q2
    ) Q3



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL सुरक्षा सर्वोत्तम अभ्यास

  2. कैसे एक अद्वितीय बाधा का उल्लंघन करने पर Postgres में मूल पंक्ति वापस करने के लिए?

  3. एक सरणी का Nth तत्व प्राप्त करें जो string_to_array () फ़ंक्शन से लौटाता है

  4. डॉकटर कंपोज़ में पोस्टग्रेज कंटेनर सर्वर पोर्ट को बदलना

  5. कॉलम में तालिका परिणाम मर्ज करें (धुरी/क्रॉसस्टैब?)