sql - 在 ms Access 中从每个组中选择至少 3 行时出错 - 仅选择了至少 2 行
问题描述
我有包含 2 列 ID_NO 和 Date_of_arrival 的数据。我想为 MS-Access 中的每个 ID 找到至少 3 个 date_of_arrival。我已经编写了代码,除了“11111-00000-11”之外的所有 ID_NO 都可以正常工作,其中它只选择前 2 行。请帮助我更正我的代码以选择至少 3 个 Date_of_arrival 而不是 2。
SELECT a.ID_NO, a.Date_of_arrival
FROM MainTable a WHERE
[Date_of_arrival] IN ( SELECT TOP 5 [Date_of_arrival]
FROM MainTable B WHERE
a.ID_NO = B.ID_NO
ORDER BY B.[Date_of_arrival ] ) ORDER BY a.ID_NO, a.[Date_of_arrival];
ID_NO Date_of_arrival
11111-00000-11 13/11/2019
11111-00000-11 13/11/2019
11111-00000-11 30/12/2019
11111-00000-11 04/02/2020
11111-00000-11 04/02/2020
11111-00000-11 25/02/2020
11111-00000-11 16/03/2020
11111-00000-11 20/03/2020
11111-00000-11 24/04/2020
11111-00000-11 24/04/2020
11111-00000-11 24/04/2020
11111-00000-11 14/05/2020
11111-00000-11 14/05/2020
11111-00000-11 02/01/2019
11111-00000-11 02/01/2019
11111-00000-11 15/02/2019
11111-00000-11 15/02/2019
11111-00000-11 25/04/2019
11111-00000-11 25/04/2019
11111-00000-11 17/05/2019
11111-00000-11 17/05/2019
11111-00000-11 17/05/2019
11111-00000-11 10/06/2019
11111-00000-11 10/06/2019
11111-00000-11 15/07/2019
11111-00000-11 19/08/2019
11111-00000-11 05/09/2019
11111-00000-11 06/09/2019
11111-00000-11 07/10/2019
11111-00000-11 07/10/2019
11111-00000-11 07/10/2019
11111-00000-11 13/11/2019
11111-00000-11 28/05/2020
11111-00000-11 28/05/2020
11111-00000-11 22/06/2020
11111-00000-11 22/06/2020
11111-00000-11 13/07/2020
11111-00000-11 13/07/2020
11111-00000-11 13/07/2020
11111-00000-11 24/07/2020
11111-00000-11 24/07/2020
11111-00000-11 07/09/2020
11111-00001-12 02/01/2019
11111-00001-12 15/02/2019
11111-00001-12 25/03/2019
11111-00001-12 25/04/2019
11111-00001-12 10/06/2019
解决方案
如果你想要三个不同的值,那么你可以使用:
SELECT a.ID_NO, a.Date_of_arrival
FROM MainTable a
WHERE [Date_of_arrival] IN (SELECT TOP 3 B.[Date_of_arrival]
FROM MainTable B
WHERE a.ID_NO = B.ID_NO
GROUP BY B.[Date_of_arrival ]
ORDER BY B.[Date_of_arrival ]
)
ORDER BY a.ID_NO, a.[Date_of_arrival];
这将返回重复项,因此对于给定的 id,您将获得超过 3 行。如果要保证 3 行,则需要额外的列来区分行。让我假设你有一个主键,我称之为pk
:
SELECT a.ID_NO, a.Date_of_arrival
FROM MainTable a
WHERE a.pk IN (SELECT TOP 3 pk
FROM MainTable B WHERE
WHERE a.ID_NO = B.ID_NO
ORDER BY B.[Date_of_arrival ]
)
ORDER BY a.ID_NO, a.[Date_of_arrival];
推荐阅读
- python - 如何获得最高的 4 个元组值?
- react-native - 剂量反应原生firebase admob支持原生类型吗?
- javascript - javascript regexp 只允许数字问题
- delphi - 新安装的库的 Delphi 10.x“无法解析单元名称”
- python - 在 Python 中使用没有条件的逻辑运算符
- mysql - MySQL - 从两个表中正确获取用户及其订单数据
- c++ - 当我将鼠标悬停在qt中的不同按钮上时如何更改标签文本?
- python - 将列名转换为行值
- excel - 将outlook邮件导入excel时如何解决vba中的错误'1004'
- python - 在 List[int] 中将 0 替换为 01 并将 1 替换为 10