如何解决在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
解决方法
如果需要三个 distinct 值,则可以使用:
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];
,
我建议您首先在Access中执行一个查询,该查询按ID,到达日期和计数进行分组,计数> = 3。
SELECT a.ID_NO,a.Date_of_arrival,count(a.id_no) as CNT
FROM MainTable a
GROUP BY a.ID_NO,a.Date_of_arrival
HAVING count(a.id_no) >= 3
或者
SELECT a.ID_NO,min(a.Date_of_arrival) as MinDateArrival,max(a.Date_of_arrival) as MaxDateArrival,count(a.id_no) as CNT
FROM MainTable a
GROUP BY a.ID_NO
HAVING count(a.id_no) >= 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。