在红移SQL中使用ID和日期范围删除事务
我想在红移中创建一个查询,根据其有效日期(表B)删除事务项(表a) 我们把它叫做表A和表B 表A包含项目的所有事务 表A在红移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
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只需确保这不会使红移相关子查询规则失败。它应该传递规则,因为它不包括在引用的列表中