如何在每组 ID 和 END_DTTM_FLG 上查找 TABLE

how to LOOKUP on a TABLE per SET of ID and END_DTTM_FLG

希望你能帮帮我!

要求是 clean-up/delete 来自 TABLE_2 的 INACTIVE 记录。

INACTIVE 记录条件 是当 ID 记录有 END_DTTM IS NOT NULL 并且没有 ID 与 [=16= 相同的合作伙伴记录].

意味着如果 IDNULL END_DTTM,那么 ID 仍然有效。

我先进行了查询以获取 INACTIVE 记录,然后在获取正确数据时添加 DELETE 语法。

示例查询:

WITH SRC1 AS (
SELECT ID 
  FROM TABLE_1
 WHERE END_DTTM IS NOT NULL
)
SELECT ID 
  FROM TABLE_2 
 WHERE TABLE_2.ID = SRC1.ID
;

请检查附加的示例数据。

问题是,查询仍然获得 ACTIVE 记录(IDEND_DTTM IS NULL),因为 IDEND_DTTM IS NOT NULL 相同。

我也尝试创建一个 END_DTTM_FLG --> case when END_DTTM IS NOT NULL THEN 1 ELSE 2 END END_DTTM_FLG。我的想法是查找每个集合的ID,如果IDEND_DTTM_FLG =2那么不应该获取对应的ID

如何查找 TABLE_1 并检查每个 END_DTTM_FLGID

请帮我解决这个问题!

谢谢! ^_^

我是这样理解的

示例数据(更改会话只是为了设置日期格式;您不必这样做):

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> select * from table_1 order by id, end_dttm nulls last;

        ID END_DTTM
---------- ----------
4157061694 21.06.2021
4157061694 21.06.2021
4157061694 23.06.2021
4157061694
4157064676 19.01.2021
4157064676 20.01.2021

6 rows selected.

SQL> select * from table_2;

        ID
----------
4157061694
4157064676

从 table_2 中删除其 ID 在 table_1 中为“非活动”的行:

SQL> delete from table_2 b
  2  where not exists (select null
  3                    from table_1 a
  4                    where a.id = b.id
  5                      and a.end_dttm is null
  6                   );

1 row deleted.

结果:

SQL> select * from table_2;

        ID
----------
4157061694

SQL>

或者:

SQL> rollback;

Rollback complete.

SQL> delete from table_2 b
  2  where b.id not in (select distinct a.id
  3                     from table_1 a
  4                     where a.end_dttm is null
  5                    );

1 row deleted.

SQL> select * from table_2;

        ID
----------
4157061694

SQL>