SQL Сравнение одной даты из нескольких строк между двумя датами - PullRequest
0 голосов
/ 15 октября 2018

У меня есть 2 таблицы с общим столбцом идентификаторов.Сравните первую вкладку1 с вкладкой2 и нужно, чтобы результат не совпадал с датами между вкладками2

Create  table #tab1(id int, Idvalue int, IDDate date)
insert into #tab1
select 1,1, '2013-06-25' UNION ALL 
select 2,1, '2014-11-28' union all
select 3,1, '2015-12-06' union all
select 4,1, '2013-04-08' union all
select 5,1, '2051-12-12'
Select * from #tab1


Create  table #tab2(Idvalue int, Startdate date, EndDate Date)
insert into #tab2
select 1, '2013-05-01','2013-12-31' UNION ALL 
select 1, '2014-06-01','2050-01-01'

Select * from #tab2

DROP table #tab1
DROP table #tab2

Результат:

4   1   2013-04-08
5   1   2051-12-12

Ответы [ 4 ]

0 голосов
/ 15 октября 2018

Это должно работать или может потребоваться дополнительный фильтр для столбца IN_Data_Range:

SELECT *
    ,CASE 
        WHEN IDDate BETWEEN StartDate
                AND EndDate
            THEN 'YES'
        ELSE 'NO'
        END AS IN_Data_Range
FROM #tab1
CROSS APPLY #tab2
0 голосов
/ 15 октября 2018

Не существует версии:

select *
from #tab1
where not exists
(
    select 1
    from #tab2
    where #tab1.IDDate between #tab2.Startdate and #tab2.EndDate
)
0 голосов
/ 15 октября 2018

Я не уверен, но вы можете присоединиться

SELECT * 
FROM   tab1 
       LEFT JOIN tab2 
              ON tab1.idvalue = tab2.idvalue 
                 AND tan1.iddate > tab2.start 
                 AND tab1.iddate < tab2.end 

надеюсь, это поможет

0 голосов
/ 15 октября 2018

Попробуйте с левым соединением

select * from tab1 left join tab2 on IDDate between Startdate and enddate
where Idvalue is null
...