Пожалуйста, используйте следующие примеры данных.
declare @tbl table (id int, fid int, arrival datetime, created datetime)
insert into @tbl select 1, 10, DATEADD(dd, -10, GETDATE()), DATEADD(dd, -6, getdate())
insert into @tbl select 1, 10, DATEADD(dd, -10, GETDATE()), DATEADD(dd, -6, getdate())
insert into @tbl select 1, 10, DATEADD(dd, -10, GETDATE()), null
insert into @tbl select 2, 20, DATEADD(dd, -3, GETDATE()), DATEADD(dd, -2, getdate())
insert into @tbl select 2, 20, DATEADD(dd, -3, GETDATE()), null
Я хотел бы иметь все строки between arrival '2011-02-25' and '2011-02-28'
, созданные после этой даты '2011-02-20'
, включая дату создания null.
Query1:
select * from @tbl
where arrival >= '2011-02-25' and arrival < '2011-02-28'
and created >= '2011-02-20'
Выше запроса извлекают две строки, но мне нужна 3-я строка FID = 10, которая создала дату null
Qery2: выберите строку FID = 20, которую я надеваюне нужно, потому что он не находится в диапазоне даты прибытия.
select * from @tbl
where arrival >= '2011-02-25' and arrival < '2011-02-28'
and created >= '2011-02-20' OR created is null
Это примерные данные.Исходный запрос извлекает данные из другой таблицы и содержит объединения с более 10 таблицами, поэтому я не хочу повторять запрос, чтобы включить строки во временную таблицу.
Спасибо.
РЕДАКТИРОВАТЬ: Извините, хотел спросить это, но поставил неправильный вопрос.Спасибо за вашу помощь.
declare @tbl table (id int, fid int, arrival datetime, created datetime)
insert into @tbl select 1, 10, DATEADD(dd, -10, GETDATE()), DATEADD(dd, -6, getdate())
insert into @tbl select 1, 10, DATEADD(dd, -10, GETDATE()), DATEADD(dd, -6, getdate())
insert into @tbl select 1, 10, null, DATEADD(dd, -6, getdate())
insert into @tbl select 2, 20, DATEADD(dd, -3, GETDATE()), DATEADD(dd, -2, getdate())
insert into @tbl select 2, 20, null, DATEADD(dd, -2, getdate())
select * from @tbl
where arrival >= '2011-02-26' and arrival < '2011-02-28'
Нужен также третий ряд fid = 10, где arrival
дата NULL