在红移SQL中使用ID和日期范围删除事务

在红移SQL中使用ID和日期范围删除事务,sql,amazon-redshift,Sql,Amazon Redshift,我想在红移中创建一个查询,根据其有效日期(表B)删除事务项(表a) 我们把它叫做表A和表B 表A包含项目的所有事务 表A Item_Code Date 1. I0001 2019-12-01 2. I0002 2019-12-02 3. I0001 2020-01-01 4. I0003 2020-01-01 那么表2包含了项目的有效日期 表B Item_Code Valid_From Valid_To

我想在红移中创建一个查询,根据其有效日期(表B)删除事务项(表a)

我们把它叫做表A和表B

表A包含项目的所有事务

表A

 Item_Code      Date

 1. I0001      2019-12-01 
 2. I0002      2019-12-02 
 3. I0001      2020-01-01 
 4. I0003      2020-01-01
那么表2包含了项目的有效日期

表B

Item_Code      Valid_From        Valid_To

 1. I0001      2019-01-01         2019-12-31
 2. I0002      2019-01-01         2019-12-31
 3. I0003      2019-01-01         2019-12-31
我的预期产出将是

项目代码日期

 1. I0001         2019-12-01
 2. I0002         2019-12-02

这将给出您预期的结果

Select * from TableA a where not exists(select 1 from TableB b on a.Date between b.Valid_From        
 and Valid_To)
一旦你确定那是你想要的,你就用

delete from TableA a where not exists(select 1 from TableB b on a.Date between b.Valid_From        
 and Valid_To)

我将联接这两个表,并将有效性作为联接条件插入。 这将删除所有无效项,或者您可以反转有效性条件以检测哪些项无效

SELECT A.ITEM_CODE,A.DATE
FROM Table a
INNER JOIN TABLE B 
ON A.ITEM_CODE=B.ITEM_CODE AND A.DATE=> B.Valid_from AND A.date <= B.Valid_to
选择A.ITEM\u代码,A.DATE
从表a
内部联接表B

在A.ITEM_CODE=B.ITEM_CODE和A.DATE=>B.Valid_from和A.DATE上,OP只需确保这不会使红移相关子查询规则失败。它应该传递规则,因为它不包括在引用的列表中