Считать дни подряд - PullRequest
1 голос
/ 04 июля 2019

Пожалуйста, я хочу посчитать общее количество последовательных дней для записи события и упорядочить по этой записи, группируя по идентификатору актера. например у нас есть. Для sqlite

event_id| created_at |actor_id
1       |  2018-07-01|  40     /* this is a consecutive days
1       |  2018-07-02|  40     */
1       |  2018-07-04|  40
1       |  2018-07-05|  40
1       |  2018-07-09|  40
2       |  2018-07-11|  40
2       |  2018-07-12|  40
1       |  2018-07-13| 41

должен дать мне что-то вроде

actor_id|streak
40     | 3 
41     | 0

1 Ответ

2 голосов
/ 04 июля 2019

Вы можете group by actor_id и суммировать условно, если существует последовательный день:

select 
  t.actor_id,
  sum(case when exists (
      select 1 from tablename
      where
        actor_id = t.actor_id and
        julianday(created_at) - julianday(t.created_at) = 1 
  ) then 1 else 0 end) streak
from tablename t
group by t.actor_id

См. Демоверсию .Или с самостоятельным соединением:

select 
  t.actor_id,
  sum(tt.created_at is not null) streak
from tablename t left join tablename tt
on tt.actor_id = t.actor_id and julianday(tt.created_at) - julianday(t.created_at) = 1
group by t.actor_id

См. демо .

Результаты:

| actor_id | streak |
| -------- | ------ |
| 40       | 3      |
| 41       | 0      |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...