微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在ms Access中从每个组中选择至少3行时出错-仅选择了至少2行

如何解决在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 举报,一经查实,本站将立刻删除。