powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли выбрать строки, группируя по дате через некий интервал?
3 сообщений из 3, страница 1 из 1
Можно ли выбрать строки, группируя по дате через некий интервал?
    #39818331
Victor256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую. Есть таблица с полем timestamp(3), строки - это запись действию пользователя (API). Стоит задача посчитать повторные возвраты, условно - если между двумя, отсортированными по id, записями есть разрыв по времени больше минуты, считается что пользователь покинул приложение и потом открыл его заново. Пример:
iduser_iddt5112019-05-25 12:20:19.60652222019-05-25 12:20:20.0085312019-05-25 12:20:21.5325412019-05-25 12:20:22.78755222019-05-25 12:21:50.8215612019-05-25 12:30:12.05157222019-05-25 12:44:45.712
тут для user_id=1 id=[51,53,54] это одно посещение, и id=56 - другое. Для user_id=22 разные посещения это все три строки id=52, 55, 57. Результат должен быть типа такого:
user_idcount12223
можно группировать целиком, для всех пользователей за заданный период, можно по одному запросу на пользователя (лучше первое).

Возможно ли такое сделать в принципе одним только SQL? PostgreSQL 10.7
...
Рейтинг: 0 / 0
Можно ли выбрать строки, группируя по дате через некий интервал?
    #39818335
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor256,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH tab(id,user_id,dt) AS (
  VALUES (51, 1, '2019-05-25 12:20:19.606'::timestamp(3)),
  (52,22,'2019-05-25 12:20:20.008'),
  (53,1,'2019-05-25 12:20:21.532'),
  (54,1,'2019-05-25 12:20:22.787'),
  (55,22,'2019-05-25 12:21:50.821'),
  (56,1,'2019-05-25 12:30:12.051'),
  (57,22,'2019-05-25 12:44:45.712')
)
SELECT user_id, count(*) ttl, count(g) sess
  FROM (
    SELECT id, user_id, dt,
           CASE WHEN dt - lag(dt, 1, dt - INTERVAL '2min') OVER (PARTITION BY user_id ORDER BY id) > INTERVAL '1min'
                THEN 1 END AS g
      FROM tab
       ) s
 GROUP BY user_id;
...
Рейтинг: 0 / 0
Можно ли выбрать строки, группируя по дате через некий интервал?
    #39818355
Victor256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov, работает, огромное спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли выбрать строки, группируя по дате через некий интервал?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]