表格如下: -
Table A
------------------------
ID | C_Start_Date
------------------------
1 | 2018-03-10
2 | 2018-03-15
Table B
----------------------------
ID | Invoice_Date
----------------------------
1 | 2018-01-15
1 | 2018-02-15
1 | 2018-03-15
2 | 2018-04-01
2 | 2018-04-04
我必须只获取那些比其C_Start_Date晚的Invoice_Date的Id。 例如,从上表中,查询应该只获取'2',因为'1'在表B中有一个条目,其中Invoice_Date早于其C_Start_Date。
答案 0 :(得分:2)
工作查询:
SELECT DISTINCT ID FROM A
WHERE ID NOT IN(
SELECT DISTINCT A.ID FROM A
INNER JOIN B ON A.ID = B.ID
WHERE B.INVOICEDATE < A.STARTDATE)
小提琴,让你玩游戏 - &gt; https://www.db-fiddle.com/f/kXXXJopWvsmHccdnPAgdmv/0
答案 1 :(得分:1)
如果我了解您的必需品,下面的示例将解决您的问题(用TSQL编写)
declare @TableA as table
(
ID int not null
,C_Start_Date date not null
)
declare @TableB as table
(
ID int not null
,Invoice_Date date not null
)
insert into @TableA
values
(1,'2018-03-10')
,(2,'2018-03-15')
insert into @TableB
values
(1,'2018-01-15')
,(1,'2018-02-15')
,(1,'2018-03-15')
,(2,'2018-04-01')
,(2,'2018-04-04')
select a.ID
from @TableA a
where not exists
(
select * from @TableB b where b.ID = a.ID and b.Invoice_Date < a.C_Start_Date
)
虽然使用DISTINCT
和简单的JOIN
同样可以实现EXISTS
,因为它通常比聚合和区分更好...