用于获取ID的SQL查询仅在特定日期之后出现

时间:2018-04-26 17:40:37

标签: sql

表格如下: -

   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。

2 个答案:

答案 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,因为它通常比聚合和区分更好...