【发布时间】:2020-06-25 22:08:29
【问题描述】:
我在 MS Access 2016 x64 中有两个表。我想用表cmet的查询结果(字段status_id)更新表事务中的字段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
【问题讨论】:
-
您的日期值显示国际格式。可能会评论allenbrowne.com/ser-36.html