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

Откуда:
Сообщений: 62187
Вобщем есть табличка сбоев некоего оборудования, задача выбрать те сбои, после устранения которых оборудование проработало 7 и более дней до повторного сбоя.
в табличке столбцы соответственно:идентификатор оборудования, дата сбоя, дата устранения

решение я сделал такое
go
create table #t(IDEquip int,DateStop datetime,DateStart datetime)
insert into #t values (1,'20160105','20160106')
insert into #t values (1,'20160108','20160110')
insert into #t values (1,'20160121','20160122')
insert into #t values (1,'20160127','20160206')
insert into #t values (2,'20160105','20160106')
insert into #t values (2,'20160115','20160116')
insert into #t values (2,'20160120','20160122')
insert into #t values (2,'20160128','20160201')
insert into #t values (2,'20160204','20160205')
insert into #t values (2,'20160214','20160215')

select t.IDEquip,t.DateStop,t.DateStart
from #t t
cross apply (select top 1 t1.IDEquip,t1.DateStop from #t t1 where t.IDEquip=t1.IDEquip and t.DateStart<t1.DateStop) tt
where datediff(day,t.DateStart,tt.DateStop)>=7


интересно какие ещё варианты?
29 июл 16, 15:51    [19473541]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
sposad,

если версия позволяет

;WITH xx
AS
(
	SELECT 
		*,
		LEAD(DateStop) OVER (PARTITION BY IDEquip ORDER BY DateStop  ) as [NextStart]
	FROM #t
)
SELECT 
*
FROM xx
WHERE 
	DATEDIFF(day,DateStart,NextStart)>=7
29 июл 16, 15:57    [19473576]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
sposad
Member

Откуда:
Сообщений: 62187
TaPaK
sposad,

если версия позволяет

;WITH xx
AS
(
	SELECT 
		*,
		LEAD(DateStop) OVER (PARTITION BY IDEquip ORDER BY DateStop  ) as [NextStart]
	FROM #t
)
SELECT 
*
FROM xx
WHERE 
	DATEDIFF(day,DateStart,NextStart)>=7
не, 2005, не даёт, но все равно интересно
29 июл 16, 16:02    [19473627]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
select a.IDEquip,a.DateStop,a.DateStart
from
(select*
,row_number() over(partition by IDEquip order by DateStop) as n
from #t) a
join
(select*
,row_number() over(partition by IDEquip order by DateStop) as n
from #t) b
on a.IDEquip = b.IDEquip and a.n + 1 = b.n
where datediff(dd,a.DateStart,b.DateStop) >=7
29 июл 16, 16:41    [19474018]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
3unknown,

row_number() 2005?
29 июл 16, 16:51    [19474090]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
автор
3unknown,

row_number() 2005?


Да, в той версии как раз появились эти штучки.
29 июл 16, 16:53    [19474104]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
3unknown,

хотя да.. но пусть лучше свой вариант использует :)
29 июл 16, 17:04    [19474169]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
TaPaK

Да, у него вариант замечательный, под все версии годится:)
29 июл 16, 17:11    [19474211]     Ответить | Цитировать Сообщить модератору
 Re: Запросик маленький, интересны варианты  [new]
aleks2
Guest
3unknown
TaPaK
Да, у него вариант замечательный, под все версии годится:)


Нафига фсе эти модные штучки?

Как молоды мы были...
select t.IDEquip,t.DateStop,t.DateStart
  from #t t
  where not exists ( select * from #t t1 where t.IDEquip = t1.IDEquip and t.DateStart < t1.DateStop and t1.DateStop <= DATEADD(DAY, 7, t.DateStart))
29 июл 16, 17:58    [19474506]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить