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
尝试将 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
列,则您可以取消注释掉的行在这种情况下的价值。
我需要创建一个报告,其中 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 |
---|---|---|---|---|---|
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 |
---|---|---|---|---|---|
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 |
---|---|---|---|---|---|
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
尝试将 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
列,则您可以取消注释掉的行在这种情况下的价值。