Установить счетчик sql - PullRequest
0 голосов
/ 14 мая 2018

Я не специалист по 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 голосов
/ 14 мая 2018

Вы можете использовать аналитические функции (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

Для стабильной сортировки нужен какой-то столбец id / timestamp.

...