【发布时间】:2020-08-27 12:00:05
【问题描述】:
wk_remark 表是这样的
id case_id seq action_user_id status_cd
100 1201 1 321 CW
101 1201 2 421 TI
102 1201 3 521 AS
103 1202 1 600 CW
104 1201 4 654 BV
105 1202 2 654 TI
106 1203 1 654 AS
107 1201 5 CD
对于最新 case_id 不在 ('CL', 'CD') 和 action_user_id = 654 中的案例,我的查询必须更新 action_user_id = 900;
因此,输出应如下所示,case_id 1201 不会更新,因为 1201 的最新 case_id 是 seq=5, id = 107 的 status_cd = 'CD'。 case_id = 1202 和 1203 的案例应更新为 action_user_id = 900。
id case_id seq action_user_id status_cd
100 1201 1 321 CW
101 1201 2 421 TI
102 1201 3 521 AS
103 1202 1 600 CW
104 1201 4 654 BV
105 1202 2 900 TI
106 1203 1 900 AS
107 1201 5 CD
我使用下面的这个查询首先选择记录,
SELECT max(seq), case_id
FROM wk_remark
WHERE action_user_id = 654 and status_cd not in ('CL', 'CD')
GROUP BY case_id
ORDER BY case_id;
我期待 2 条记录,但我得到了 3 条记录,
id case_id seq action_user_id status_cd
104 1201 4 654 BV
105 1202 2 654 TI
106 1203 1 654 AS
我的内部选择应该是什么样子以及如何只更新 2 条记录。请告诉我。 谢谢。
【问题讨论】:
-
您的数据看起来不正确,因为只有 1201 有 654 条记录,但您的输出有 3 条记录
-
@VN'sCorner .. 1201 的最新序列是 5,其状态为 CD,因此不应选择。
-
但 action_user_id 为 Null,您希望仅在 action_user_id 为 654 且 status_cd 不在 ('CL', 'CD') 中时选择?我错过了什么吗?
-
@VN'sCorner 我必须在每个案例中选择最新的,这些案例的 action_user_id 应该有 action_user_id = 654 并且 status_cd 不在('CL','CD')
-
不应选择 1201,因为最新的 1201 没有 action_user_id = 654