powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка по временному интервалу (1 значение из интервала)
5 сообщений из 30, страница 2 из 2
Группировка по временному интервалу (1 значение из интервала)
    #39842922
Dimais
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 invm

так нет же ...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
set dateformat ymd

declare @t as table (userid int, dt datetime2(0))

insert into @t select 1,         '2019-07-01 07:00:00'
union select 1,			 '2019-07-01 07:19:15'
union select 1,			 '2019-07-01 07:20:01'
union select 1,			 '2019-07-01 07:40:01'
union select 1,			 '2019-07-01 07:45:15'


;with a as
(
 select
  a.*,
  b.x - lag(b.x, 1, b.x) over (partition by a.userid order by a.dt) as d
 from
  @t a cross apply
  (select datediff(mi, '1900', a.dt)) b(x)
),
b as (select *, sum(d) over (partition by a.userid order by a.dt) % 20 as drt from a),
c as (select userid, dt, case when drt % 20 < lag(drt % 20, 1, drt + 1) over (partition by userid order by dt) then 1 else 0 end as f from b)
select userid, dt from c where f = 1
...
Рейтинг: 0 / 0
Группировка по временному интервалу (1 значение из интервала)
    #39842927
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmСправедливости ради - таки можно без рекурсии:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with a as
(
 select
  a.*,
  b.x - lag(b.x, 1, b.x) over (partition by a.userid order by a.dt) as d
 from
  @t a cross apply
  (select datediff(mi, '1900', a.dt)) b(x)
),
b as (select *, sum(d) over (partition by a.userid order by a.dt) % 20 as drt from a),
c as (select userid, dt, case when drt % 20 < lag(drt % 20, 1, drt + 1) over (partition by userid order by dt) then 1 else 0 end as f from b)
select userid, dt from c where f = 1;


А вот и нет.
Не выводит последнюю запись.
И вот с таким датасетом - не выведет последний интервал на 2 записи:
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @t as table (userid int, dt datetime2(0))
insert into @t select 1,         '2019-07-01 06:58:00'
union select 1,			 '2019-07-01 07:12:15' --<
union select 1,			 '2019-07-01 07:19:15'
union select 1,			 '2019-07-01 07:22:01' --<
union select 1,			 '2019-07-01 07:42:01'
union select 1,			 '2019-07-01 07:45:15'; --<
...
Рейтинг: 0 / 0
Группировка по временному интервалу (1 значение из интервала)
    #39842956
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with a as
(
 select
  a.*,
  b.x - lag(b.x, 1, b.x) over (partition by a.userid order by a.dt) as d
 from
  @t a cross apply
  (select datediff_big(ss, '1900', a.dt)) b(x)
),
b as (select *, sum(d) over (partition by a.userid order by a.dt) as drt from a),
c as (select userid, dt, row_number() over (partition by userid, drt / 1201 order by dt) as rn from b)
select
 userid, dt
from
 c
where rn = 1;

?
...
Рейтинг: 0 / 0
Группировка по временному интервалу (1 значение из интервала)
    #39842974
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Датасет:
Код: sql
1.
2.
3.
4.
5.
insert into @t select 1,         '2019-07-01 07:00:00'
union select 1,			 '2019-07-01 07:19:15'
union select 1,			 '2019-07-01 07:20:00'
union select 1,			 '2019-07-01 07:40:01'
union select 1,			 '2019-07-01 07:45:15';



Должно быть 2 группы, а получилось 3
...
Рейтинг: 0 / 0
Группировка по временному интервалу (1 значение из интервала)
    #39842985
MaksK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, результат не корректный.
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка по временному интервалу (1 значение из интервала)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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