我在 MS Access 2016 x64 中有两个表。我想用表注释(字段status_id)的查询结果更新表transactions中的字段status_id,必须是最新的status_id,不能是0或6。 无论我尝试什么,即使使用联接,结果仍然无法提供预期的结果(应该是 9 条记录)。
如何创建仅选择正确记录的查询?
更新 SQL 非常简单,为了清楚起见,将其省略。如果我有一个有效的 SELECT 查询,我可以将其更改为更新 SQL。
感谢您的帮助!
Table transactions
id trans_no status_id
12 9483241273
13 9483241274
14 9483241275
15 9483241276
16 9483241277
17 9483241343
18 9483241344
19 9483241345
20 9483241346
21 9483390967
Table comments
id trans_id com_date status_id
29 12 23-06-2020 16:40:21 1
30 13 23-06-2020 16:40:26 1
31 14 23-06-2020 16:40:32 1
32 15 23-06-2020 16:40:38 1
33 16 23-06-2020 16:40:44 1
34 17 23-06-2020 16:40:50 1
35 18 23-06-2020 16:40:56 1
36 19 23-06-2020 16:41:01 1
37 20 23-06-2020 16:41:07 1
38 15 23-06-2020 16:40:44 6
39 18 25-06-2020 16:40:44 6
40 15 22-06-2020 16:40:38 11
SQL
SELECT comments.trans_id, comments.status_id, MAX(comments.com_date) AS com_date
FROM comments
GROUP BY comments.trans_id, comments.status_id, MAX(comments.com_date)
HAVING comments.status_id<>0 AND comments.status_id)<>6))
结果:10 条记录(预期 9 条)
trans_id status_id com_date
12 1 23-06-2020 16:40:21
13 1 23-06-2020 16:40:26
14 1 23-06-2020 16:40:32
15 1 23-06-2020 16:40:38
15 11 22-06-2020 16:40:38
16 1 23-06-2020 16:40:44
17 1 23-06-2020 16:40:50
18 1 23-06-2020 16:40:56
19 1 23-06-2020 16:41:01
20 1 23-06-2020 16:41:07
SQL
SELECT a.trans_id, a.status_id
FROM comments a
INNER JOIN
(SELECT b.trans_id, Max(b.com_date) AS com_date
FROM comments b
GROUP BY b.trans_id) c
ON a.trans_id=c.trans_id
AND a.com_date = c.com_date
WHERE a.status_id<>0 AND a.status_id<>6
结果:7 条记录(预期 9 条)
trans_id status_id
12 1
13 1
14 1
16 1
17 1
19 1
20 1
最佳答案
涉及聚合查询的 UPDATE 操作将阻止 UPDATE 操作。必须使用替代方法来编辑字段。保存计算数据(尤其是汇总数据)通常是不明智的。如果你可以计算UPDATE,那么你可以在需要时计算它,如下所示:
SELECT comments.*
FROM comments
WHERE (((comments.id) In (SELECT TOP 1 ID FROM comments AS Dupe WHERE Dupe.trans_id=comments.trans_id
AND Dupe.status_id NOT IN(0,6) ORDER BY Dupe.com_date DESC)));
可以通过 LEFT JOIN 查询交易,以显示带有派生状态代码的所有交易记录。
关于sql - Access SQL 根据条件从组中选择最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62585084/