设置一个计数器sql

时间:2018-05-14 13:54:04

标签: sql counter

我不是sql的专家,我正在尝试找到解决以下问题的方法。

我有以下数据

test   -    test1 
31477831 -  a1 
31477831 -  a0 
31477831 -  a1 
31477831 -  a0 
31477831 -  a0 
31477832 -  a0 
31477832 -  a0 
31477832 -  a1 

我需要设置一个计数器如下:

test -     test1    - counter
31477831 -  a1      - 0
31477831 -  a0      - 1
31477831 -  a1      - 2
31477831 -  a0      - 3
31477831 -  a0      - 3
31477832 -  a0      - 0
31477832 -  a0      - 0
31477832 -  a1      - 1

当测试字段更改需要从0开始时,test1字段更改需要增加1.感谢提前。

1 个答案:

答案 0 :(得分:1)

您可以使用分析函数(SQL Server / Oracle / MySQL 8.0 + / PostgreSQL /...):

WITH cte AS (
  SELECT *, 
    CASE WHEN LAG(test1) OVER(PARTITION BY test ORDER BY id) <> test1 
         THEN 1 ELSE 0 END l
  FROM tab
)
SELECT *, SUM(l) OVER(PARTITION BY test ORDER BY id) AS counter
FROM cte
ORDER BY id;

<强> DBFiddle Demo

对于稳定排序,您需要某种id / timestamp列。