SQL 帮助 - 检测指定值列表内的变化

SQL Help - Detect Changes Within Specified List of Values

我需要创建一个报告,其中 returns 客户帐户的帐户类型已更改为或来自此 account_types 列表: ('CAM','CAMADP','CAMHD','CAMHDADP','DIST','DISTADP','GAM','GAMADP','LAM','LAMADP').

假设我今天有这个table:

client account_type customer_org_ID insert_date update_date active_Y_N
Google GAM C000001 2006-05-04 09:15:34 2020-05-04 06:01:16 Y
Netflix LAM C000002 2006-05-04 09:15:34 2021-09-04 08:35:34 Y
Nordstrom DIST C000003 2006-05-04 09:15:34 2021-05-04 02:15:34 Y
Costco CAMHDADP C000004 2006-05-04 09:15:34 2021-05-04 09:36:34 Y
Boeing CAMHD C000005 2006-05-04 09:15:34 2021-05-04 12:15:45 Y
Samsung DISTADP C000006 2006-05-04 09:15:34 2020-06-15 01:10:16 Y

假设我明天上班,第 1、2、3、5 和 6 行(以粗体显示)发生了变化。

client account_type customer_org_ID insert_date update_date active_Y_N
Google CAM C000001 2006-05-04 09:15:34 2021-11-03 12:40:41 Y
Netflix DISTADP C000002 2006-05-04 09:15:34 2021-11-03 12:40:41 Y
Nordstrom GAMADP C000003 2006-05-04 09:15:34 2021-11-03 12:40:41 Y
Costco CAMHDADP C000004 2006-05-04 09:15:34 2021-05-04 09:36:34 Y
Boeing UNKWN C000005 2006-05-04 09:15:34 2021-11-03 12:40:41 Y
Samsung DISTADP C000006 2006-05-04 09:15:34 2021-11-03 12:40:41 N

我需要一个 sql 查询来 return 这三行数据,因为在我提到的 account_types 列表中对它们的 account_type 进行了更新一开始。

client account_type customer_org_ID insert_date update_date active_Y_N
Google CAM C000001 2006-05-04 09:15:34 2021-11-03 12:40:41 Y
Netflix DISTADP C000002 2006-05-04 09:15:34 2021-11-03 12:40:41 Y
Nordstrom GAMADP C000003 2006-05-04 09:15:34 2021-11-03 12:40:41 Y

我在 DB2 LUW 数据库中工作。

DB2 提供临时表功能,从版本 10 开始引入。

无需使用触发器,DB2 会自动管理它

https://www.ibm.com/docs/en/db2/11.5?topic=tables-system-period-temporal

https://philipkgunning.files.wordpress.com/2013/02/traveling-through-time-with-db2-time-travel-query3apr13.pdf

尝试将 mytab 更改为您的真实 table 姓名。

ALTER TABLE mytab ADD UPDATE_AT_DATE TIMESTAMP;

CREATE OR REPLACE TRIGGER mytab_BUR
BEFORE UPDATE OF ACCOUNT_TYPE ON mytab
REFERENCING NEW AS N OLD AS O
FOR EACH ROW
WHEN 
(
--     O.ACCOUNT_TYPE IS DISTINCT FROM N.ACCOUNT_TYPE
--  AND
--  (
     O.ACCOUNT_TYPE IN ('CAM','CAMADP','CAMHD','CAMHDADP','DIST','DISTADP','GAM','GAMADP','LAM','LAMADP')
  OR N.ACCOUNT_TYPE IN ('CAM','CAMADP','CAMHD','CAMHDADP','DIST','DISTADP','GAM','GAMADP','LAM','LAMADP')
--  )
)
SET N.UPDATE_AT_DATE = CURRENT TIMESTAMP 
;

如果您的应用程序可能会使用与已有值相同的值更新 ACCOUNT_TYPE 列,而您不想更新新的 UPDATE_AT_DATE 列,则您可以取消注释掉的行在这种情况下的价值。