2015-05-11 3 views
0

Невозможно создать сценарий написания для моего выбора.Как проверить данные при выборе одного значения?

У меня есть такая таблица с некоторыми службами:

+----------+-------------+------------+ 
| Serv_cod | Start_Date | End_Date | 
+----------+-------------+------------+ 
|  1 | 01/03/2015 | 01/03/2999 | 
|  2 | 20/03/2015 | 20/03/2999 | 
|  2 | 01/01/2012 | 18/03/2015 | 
|  3 | 13/03/2015 | 13/03/2999 | 
|  3 | 03/05/2011 | 12/02/2015 | 
|  4 | 14/03/2009 | 27/03/2015 | 
|  4 | 28/03/2015 | 28/03/2999 | 
+----------+-------------+------------+ 

мне нужно выбрать только то, что услуги, которые стали не более чем через 5 дней после службы с тем же названием закончилось. I`d хотел бы получить такой результат:

+----------+-------------+------------+ 
| Serv_cod | Start_Date | End_Date | 
+----------+-------------+------------+ 
|  2 | 20/03/2015 | 20/03/2999 | 
|  2 | 01/01/2012 | 18/03/2015 | 
|  4 | 14/03/2009 | 27/03/2015 | 
|  4 | 28/03/2015 | 28/03/2999 | 
+----------+-------------+------------+ 

I`ve пытался решить его с таким сценарием:

select * from serv 
where serv_cod in ( 
select serv_cod from serv a 
inner join serv b 
on a.serv_cod=b.serv_code 
where a.start_date between b.end_date - 5 and b.end_date ) 

Но я `t didn получить результат я хочу. Может ли кто-нибудь помочь? Спасибо заранее!

+0

между DateAdd (день, - 5, b.end_date) и b.end_date –

ответ

0

Предполагая, что интервалы не перекрываются, в SQL Server 2012+, вы можете использовать lag():

select s.* 
from (select s.*, 
      lag(end_date) over (partition by serv_code order by start_date) as prev_end_date 
     from serv s 
    ) s 
where start_date <= dateadd(day, 5, prev_end_date) and 
     start_date >= prev_end_date 

В противном случае, вы можете использовать все дни exists:

select s.* 
from serv s 
where exists (select 1 
       from serv s2 
       where s.start_date <= dateadd(day, 5, s2.end_date) and 
        s.start_date >= s2.end_date 
      ); 
+0

Спасибо, Гордон! Интервалы могут перекрываться. К сожалению, я не понимаю ваш второй скрипт. – Andrii

+0

@ Andrii. , , Я не понял этого, пока не исправил ссылки на колонки. –

Смежные вопросы