Tenho uma tabela PostgreSQL df
com as seguintes informações:
área_id | trip_nr | carimbo de data/hora |
---|---|---|
a | 3 | 29/06/2022 17:18:03 |
a | 2 | 29/06/2022 17:18:02 |
a | 1 | 29/06/2022 17:18:01 |
b | 1 | 28/06/2022 19:21:03 |
c | 3 | 28/06/2022 19:21:02 |
e | 3 | 28/06/2022 19:21:01 |
e | 2 | 27/06/2022 17:36:03 |
c | 2 | 27/06/2022 17:36:02 |
c | 1 | 27/06/2022 17:36:01 |
e | 1 | 27/06/2022 16:55:03 |
Gostaria de adicionar uma coluna continuous
que verifica se o trip_nr
para um determinado area_id
segue cronologicamente desde a primeira visita com base na ordem de timestamp
.
Em outras palavras, continuous=True
se an area_id
for visitado pela enésima vez e as visitas anteriores foram iguais area_id
desde n, n-1,...,1.
E, continuous=False
se an area_id
for visitado pela enésima vez, mas um diferente area_id
foi visitado em algum lugar entre as visitas n, n-1,...,1 (ou seja, a sequência de trip_nr
's é quebrada em algum ponto).
Um exemplo da saída desejada:
área_id | trip_nr | carimbo de data/hora | contínuo |
---|---|---|---|
a | 3 | 29/06/2022 17:18:03 | Verdadeiro |
a | 2 | 29/06/2022 17:18:02 | Verdadeiro |
a | 1 | 29/06/2022 17:18:01 | Verdadeiro |
b | 1 | 28/06/2022 19:21:03 | Verdadeiro |
c | 3 | 28/06/2022 19:21:02 | Falso |
e | 3 | 28/06/2022 19:21:01 | Falso |
e | 2 | 27/06/2022 17:36:03 | Falso |
c | 2 | 27/06/2022 17:36:02 | Verdadeiro |
c | 1 | 27/06/2022 17:36:01 | Verdadeiro |
e | 1 | 27/06/2022 16:55:03 | Verdadeiro |
Como posso conseguir isso de forma otimizada? As respostas Clickhouse/SQL também são bem-vindas.
Observe que o carimbo de data/hora não é necessariamente armazenado em ordem.