我不是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.感谢提前。
答案 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列。