powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет времени для одинаковых повторяющихся значений.
4 сообщений из 4, страница 1 из 1
Расчет времени для одинаковых повторяющихся значений.
    #40132980
kosta_2073
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Никак не могу сообразить скул.
есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
id	t_id	              created	                         delta
500	11	          2017-06-27 13:38:32.013	0,0470344570255873
570	11	          2017-06-27 13:48:32.013	0,0470344570255873
579	11	          2017-06-27 13:49:52.293	0	
580	11	          2017-06-27 13:55:52.293	0	
583	11	          2017-06-27 13:59:52.293	0	
585	11	          2017-06-27 14:14:28.517	0	
590	11	          2017-06-27 14:15:17.917	0,052557428765052	
.......
......
619	11	          2017-07-21 11:01:13.030	0,00363766061013005	
659	11	          2017-07-21 11:11:13.030	0,00363766061013005	
670	11	          2017-07-21 11:12:13.803	0	
689	11	          2017-07-21 11:12:22.160	0	
700	11	          2017-07-21 11:12:27.907	0,000234218941076596



надо получить таблу в которой начало события - последний не ноль перед "группой 0", конец - последний 0 в "группе 0"
т.е. вот так:
Код: sql
1.
2.
3.
   t_id     start                                         end             start_id   end_id
   11	   2017-06-27 13:48:32.013	    2017-06-27 14:14:28.517       570          585
   11      2017-07-21 11:11:13.030          2017-07-21 11:12:22.160       659          689



start_id и end_id - для простоты понимания .

заранее спасибо.
...
Рейтинг: 0 / 0
Расчет времени для одинаковых повторяющихся значений.
    #40132994
3unknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
DROP TABLE IF EXISTS #data;
CREATE TABLE #data (
  [id]    INT,
  [t_id] int,
  [created] datetime,
  delta float
)
;

insert #data
values(500,11,'2017-06-27 13:38:32.013',0.0470344570255873),
(570,11,'2017-06-27 13:48:32.013',	0.0470344570255873),
(579,11,'2017-06-27 13:49:52.293',	0),	
(580,11,'2017-06-27 13:55:52.293',	0),	
(583,11,'2017-06-27 13:59:52.293',	0),
(585,11,'2017-06-27 14:14:28.517',	0),	
(590,11,'2017-06-27 14:15:17.917',	0.052557428765052),	
(519,11,'2017-07-21 11:01:13.030', 0.00363766061013005),
(659,11,'2017-07-21 11:11:13.030',	0.00363766061013005),
(670,11,'2017-07-21 11:12:13.803',	0),	
(689,11,'2017-07-21 11:12:22.160',	0),
(700,11,'2017-07-21 11:12:27.907',0.000234218941076596)

;with a as(
select  * 
,case when lead(delta) over(order by created) = 0 or delta = 0 then 1 else 0 end n
from #data
)
,b as(
select*,
case when n <> lead(n) over(order by created) then 1 else 0 end f
from a
)
,c as(
select *,
sum(f) over(order by created) s,
sum(f) over(order by created) - f g
from b
)
select min(created) as start_date,max(created) as end_date,min(id) as start_id,max(id) as end_id
from c
where n=1
group by g
...
Рейтинг: 0 / 0
Расчет времени для одинаковых повторяющихся значений.
    #40132995
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3unknown
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
DROP TABLE IF EXISTS #data;
CREATE TABLE #data (
  [id]    INT,
  [t_id] int,
  [created] datetime,
  delta float
)
;

insert #data
values(500,11,'2017-06-27 13:38:32.013',0.0470344570255873),
(570,11,'2017-06-27 13:48:32.013',	0.0470344570255873),
(579,11,'2017-06-27 13:49:52.293',	0),	
(580,11,'2017-06-27 13:55:52.293',	0),	
(583,11,'2017-06-27 13:59:52.293',	0),
(585,11,'2017-06-27 14:14:28.517',	0),	
(590,11,'2017-06-27 14:15:17.917',	0.052557428765052),	
(519,11,'2017-07-21 11:01:13.030', 0.00363766061013005),
(659,11,'2017-07-21 11:11:13.030',	0.00363766061013005),
(670,11,'2017-07-21 11:12:13.803',	0),	
(689,11,'2017-07-21 11:12:22.160',	0),
(700,11,'2017-07-21 11:12:27.907',0.000234218941076596)

;with a as(
select  * 
,case when lead(delta) over(order by created) = 0 or delta = 0 then 1 else 0 end n
from #data
)
,b as(
select*,
case when n <> lead(n) over(order by created) then 1 else 0 end f
from a
)
,c as(
select *,
sum(f) over(order by created) s,
sum(f) over(order by created) - f g
from b
)
select min(created) as start_date,max(created) as end_date,min(id) as start_id,max(id) as end_id
from c
where n=1
group by g


Бред.
Зачем в этом бреде напрягать сервер группировками?

Учись, студент

Код: sql
1.
2.
3.
4.
5.
with t as ( select *, leadDelta = lead(delta) over(partition by t_id order by [created]), lagDelta = lag(delta) over(partition by t_id order by [created]) from #data )
   , b as ( select *, n = row_number() over(partition by t_id order by [created]) from t where delta <> 0 and leadDelta = 0 )
   , e as ( select *, n = row_number() over(partition by t_id order by [created]) from t where delta = 0 and leadDelta <> 0 )
  select * from b inner join e on b.t_id = e.t_id and b.n = e.n
    order by b.created
...
Рейтинг: 0 / 0
Расчет времени для одинаковых повторяющихся значений.
    #40133039
kosta_2073
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
громадное спасибо буду пробовать.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет времени для одинаковых повторяющихся значений.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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