Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Количество "касаний" в рамках 1-й минуты  [new]
Pallich
Member

Откуда:
Сообщений: 22
Всем привет.

Помогите пожалуйста определить количество клиентов (касаний клиентов) которые сделали транзакции НЕ в рамках 1-й минуты.
А именно должно считаться только то время которое отличается у данного клиента от предыдущего его времени более чем на 1 минуту.

Пример.

Есть данные:

ClientId; DateTime
111; 10:30:05
111; 10:30:55
111; 10:31:50
111; 10:32:10
111; 10:33:05

111; 11:00:00
111; 11:00:10

222; 10:00:00
222; 10:00:10

222; 10:10:00
222; 10:10:30

222; 11:00:00

(пустыми строками разделил касания, чтоб наглядно понятнее было что значит "касание")


Желаемый результат:

ClientId; Count
111; 2
222; 3


Спасибо.
20 сен 18, 00:08    [21680176]     Ответить | Цитировать Сообщить модератору
 Re: Количество "касаний" в рамках 1-й минуты  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
Pallich,
lead / lag Вам в помощь
20 сен 18, 04:07    [21680223]     Ответить | Цитировать Сообщить модератору
 Re: Количество "касаний" в рамках 1-й минуты  [new]
aleks222
Member

Откуда:
Сообщений: 959
with t as ( select * from [Есть данные:] )
 select * from f
                    where not exists( select from t as t1 where t1.ClientId = t.ClientId and t1.DateTime >= dateadd( minute, -1, t.DateTime )
20 сен 18, 05:38    [21680231]     Ответить | Цитировать Сообщить модератору
 Re: Количество "касаний" в рамках 1-й минуты  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
with a as
(
 select id, t, case when datediff(s, lag(t, 1, t) over (partition by id order by t), t) > 60 then 1 else 0 end as d from [Есть данные]
),
b as
(
 select id, t, d, sum(d) over (partition by id order by t) as g from a
)
select id, count(distinct g) from b group by id;
20 сен 18, 08:58    [21680291]     Ответить | Цитировать Сообщить модератору
 Re: Количество "касаний" в рамках 1-й минуты  [new]
Pallich
Member

Откуда:
Сообщений: 22
aleks222, Спасибо, но не смог таким образом посчитать. Ошибка

invm, Спасибо, все получилось!
20 сен 18, 12:13    [21680604]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить