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

Откуда:
Сообщений: 38
Доброго времени суток.
У меня есть таблица операций:
t
id begin_date end_date g_id o_id
12011-11-30 06:00:00.0002011-11-30 10:15:00.0003312
22011-11-29 06:00:00.0002011-11-30 06:00:00.0003355
32011-11-28 06:00:00.0002011-11-29 06:00:00.0003345
42011-11-27 12:00:00.0002011-11-28 06:00:00.0003376
52011-11-22 02:30:00.0002011-11-22 06:00:00.0003386
62011-11-22 06:00:00.0002011-11-22 10:15:00.0003393
72011-11-20 12:00:00.0002011-11-20 18:15:00.0003311
......


На входе запроса id конкретной операции.
На выходе мне нужно записи начала и окончания операции. Т.е. берем дату начала и окончания текущей операции, после этого смотрим есть ли операция позже (end_date=begin_date) и есть ли операции раньше (begin_date=end_date) и так далее пока не найдется самая ранняя и поздняя операции.
При id=1 или 2 или 3 или 4 запрос должен выдать 2 записи - с id=1 и id=4
При id=5 или 6 запрос должен выдать 2 записи - с id=5 и id=6
При id=7 запрос должен выдать 1 запись с id=7
17 дек 11, 18:04    [11782742]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить запрос  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
declare @t table ( id int, begin_date datetime, end_date datetime, g_id int, o_id int )
insert into @t
select 1,'2011-11-30 06:00:00.000','2011-11-30 10:15:00.000',33,12
union all
select 2,'2011-11-29 06:00:00.000','2011-11-30 06:00:00.000',33,55
union all
select 3,'2011-11-28 06:00:00.000','2011-11-29 06:00:00.000',33,45
union all
select 4,'2011-11-27 12:00:00.000','2011-11-28 06:00:00.000',33,76
union all
select 5,'2011-11-22 02:30:00.000','2011-11-22 06:00:00.000',33,86
union all
select 6,'2011-11-22 06:00:00.000','2011-11-22 10:15:00.000',33,93
union all
select 7,'2011-11-20 12:00:00.000','2011-11-20 18:15:00.000',33,11

declare @id int = 1;

with t1
as
(
select * from @t where id = @id
union all
select t.* from @t t inner join t1
  on t1.end_date = t.begin_date
), t2
as
(
select * from @t where id = @id
union all
select t.* from @t t inner join t2
  on t.end_date = t2.begin_date
)

select * from
(
select top 1 * from t1 order by id
) a
union
select * from
(
select top 1 * from t2 order by id desc
) b
17 дек 11, 19:44    [11783025]     Ответить | Цитировать Сообщить модератору
 Re: Помогите построить запрос  [new]
Uj
Member

Откуда:
Сообщений: 38
Спасибо огроменное!
17 дек 11, 20:59    [11783257]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить