How to count consecutive duplicates in a table?

前端 未结 6 2078
闹比i
闹比i 2021-01-13 09:52

I have below question:
Want to find the consecutive duplicates

SLNO   NAME     PG   
1       A1      NO                   
2       A2      YES                    


        
6条回答
  •  长情又很酷
    2021-01-13 10:19

    Only requiring a single aggregation query and no joins (the rest of the calculation can be done with ROW_NUMBER, LAG and LAST_VALUE):

    SELECT MAX( num_before_in_queue ) AS max_sequential_in_queue
    FROM   (
      SELECT rn - LAST_VALUE( has_changed ) IGNORE NULL OVER ( ORDER BY ROWNUM ) + 1
               AS num_before_in_queue
      FROM   (
        SELECT pg,
               ROW_NUMBER() OVER ( ORDER BY slno ) AS rn,
               CASE pg WHEN LAG( pg ) OVER ( ORDER BY slno )
                       THEN NULL
                       ELSE ROW_NUMBER() OVER ( ORDER BY sl_no )
                       END AS change
        FROM   table_name
      )
      WHERE  pg = 'Y'
    );
    

提交回复
热议问题