postgres как увеличивать счетчик только при изменении значения - PullRequest
0 голосов
/ 26 мая 2020

У меня есть таблица с положениями животных, отсортированными по времени и местоположению. Я хочу увеличивать счетчик, когда когда-либо местоположение меняется с одного идентификатора на следующий. Таким образом, каждое «Пребывание» животного должно получать уникальный идентификатор (счетчик). У меня не- SQL описание:

counter = 0
CASE (location at ID = location at ID-1) SET counter+1

Я пытался использовать Dense_Rank (), но не смог правильно установить раздел. Вот пример с нужным счетчиком.

ID Location Counter
1    3          1
2    3          1
3    2          2
4    2          2
5    3          3 
6    1          4 
7    3          5 
8    3          5 
9    3          5

CREATE TABLE locations (idn serial PRIMARY KEY, location integer);
INSERT INTO locations (location ) VALUES (3);
INSERT INTO locations (location ) VALUES (3);
INSERT INTO locations (location ) VALUES (2);
INSERT INTO locations (location ) VALUES (2);
INSERT INTO locations (location ) VALUES (3);
INSERT INTO locations (location ) VALUES (1);
INSERT INTO locations (location ) VALUES (3);
INSERT INTO locations (location ) VALUES (3);
INSERT INTO locations (location ) VALUES (3);

1 Ответ

2 голосов
/ 26 мая 2020

вы можете попробовать функцию задержки.

Вот один пример, который работает в Big SQL:

select id, location,
    sum(case when previousVal = location then 0 else 1 end) over(order by id) as Counter
from (
    select Id, location, lag(location, 1) over(order by Id) as previousVal
    from temp.locations
) tbl
order by Id;

Вывод:

ID LOCATION COUNTER1
1       3       1
2       3       1
3       2       2
4       2       2
5       3       3
6       1       4
7       3       5
8       3       5
9       3       5

...