我试图从两个一对多相关的表中检索(Subattivita.ID-Eventi-IDSubattivita),第一个表中的一些字段和第二个表中的另外两个字段(最后一个 Eventi.Evento 和第一个
我正在尝试从两个一对多相关的表(Subattivita.ID-Eventi-IDSubattivita)中检索第一个表中的某些字段以及第二个表中的另外两个字段(最后一个 Eventi.Evento 和第一个 Eventi.DataInserimento)。
我不知道为什么以下 SQL 查询会出现错误。有人可以帮忙吗?
第一表:Subattivita
ID | 内容 |
---|---|
1 | 审判 |
2 | Prova2 |
3 | 排练3 |
4 | prova4 |
5 | Prova5 |
6 | 普罗瓦6 |
7 | 普罗瓦7 |
9 | 创建绘图 |
10 | 试验8 |
第二个表:事件
ID | ID子活动 | 事件 | 评论 | 数据采集 |
---|---|---|---|---|
1 | 1 | 打开 | 自动插入 | 2024 年 1 月 8 日 |
2 | 2 | 打开 | 自动插入 | 2024 年 1 月 8 日 |
3 | 3 | 打开 | 自动插入 | 2024 年 1 月 8 日 |
4 | 4 | 打开 | 自动插入 | 2024 年 1 月 8 日 |
5 | 5 | 打开 | 自动插入 | 2024 年 2 月 8 日 |
8 | 6 | 打开 | 自动插入 | 2024 年 2 月 8 日 |
9 | 7 | 打开 | 自动插入 | 2024 年 2 月 8 日 |
12 | 9 | 打开 | 自动插入 | 2024 年 2 月 8 日 |
十三 | 10 | 打开 | 自动插入 | 2024 年 2 月 8 日 |
14 | 1 | 评论 | 测试1 | 2024 年 5 月 8 日 |
15 | 2 | 评论 | Testo2 | 2024 年 5 月 8 日 |
16 | 3 | 评论 | 德图3 | 2024 年 6 月 8 日 |
17 | 4 | 评论 | Testo4 | 2024 年 6 月 8 日 |
18 | 5 | 评论 | 测试5 | 2024 年 7 月 8 日 |
19 | 6 | 评论 | Testo8 | 2024 年 8 月 8 日 |
20 | 7 | 评论 | 德图9 | 2024 年 9 月 8 日 |
21 | 9 | 评论 | 测试12 | 2024 年 9 月 8 日 |
22 | 9 | 评论 | 继续绘图。 | 2024 年 9 月 8 日 |
23 | 9 | 已加载 | 设计已加载。 | 2024 年 9 月 8 日 |
24 | 9 | 关闭 | 批准的设计 | 2024 年 9 月 8 日 |
所需查询结果:
ID | 最后的事件 | 第一数据统计 |
---|---|---|
1 | 评论 | 2024 年 1 月 8 日 |
2 | 评论 | 2024 年 1 月 8 日 |
3 | 评论 | 2024 年 1 月 8 日 |
4 | 评论 | 2024 年 1 月 8 日 |
5 | 评论 | 2024 年 2 月 8 日 |
6 | 评论 | 2024 年 2 月 8 日 |
7 | 评论 | 2024 年 2 月 8 日 |
9 | 关闭 | 2024 年 2 月 8 日 |
10 | 打开 | 2024 年 2 月 8 日 |
我尝试使用以下 SQL 查询,但 Access 要求输入 u.Evento 值:
SELECT
t.ID,
u.Evento as LastEvento,
p.DataInserimento as FirstDataInserimento
FROM
((Subattivita t
INNER JOIN
(SELECT IDSubattivita, MAX(ID) as MaxID FROM Eventi GROUP BY IDSubattivita) u ON t.ID = u.IDSubattivita)
INNER JOIN
(SELECT IDSubattivita, MIN(ID) as MinID FROM Eventi GROUP BY IDSubattivita) p ON t.ID = p.IDSubattivita);
那不是错误消息。这是查询提示输入值,因为查询引用了数据集中没有的字段 - 正如@TimRoberts 所指出的。看起来你想要每个 IDSubattivita 的 Min(DataInserimento)。提取与每个 IDSubattivita 的最大 ID 相关的 Evento 更为复杂。考虑:
SELECT Q.IDSubattivita, Evento AS LastEvento, FirstDataInserimento FROM Eventi INNER JOIN
(SELECT Eventi.IDSubattivita, Max(Eventi.ID) AS EID,
Min(Eventi.DataInserimento) AS FirstDataInserimento FROM Eventi
GROUP BY Eventi.IDSubattivita) AS Q
ON Eventi.ID=Q.EID;
或者这个版本:
SELECT Subattivita.ID, Contenuto,
(SELECT TOP 1 Evento FROM Eventi AS Dup
WHERE IDSubattivita=Subattivita.ID ORDER BY ID DESC) AS LastEvento,
(SELECT TOP 1 DataInserimento FROM Eventi AS Dup WHERE
IDSubattivita=Subattivita.ID ORDER BY ID) AS FirstDataInserimento
FROM Subattivita;
嗨 June7,非常感谢您的帮助(两个问题回答两次!)。现在看起来非常简单和明显,但我一直无法找到正确的 SQL 查询。