MS Access获取第一,第二,第三等值

时间:2018-07-23 10:21:43

标签: ms-access

我有2个表,标签和证书,一对多关系-每个标签将具有0到10个以上与之关联的证书。

Tags                       Certs
[Tag] [Other fields]       [Tag]    [Date]     [Length]
A-22       ...             A-22    03/05/17      265
P-63       ...             A-22    15/02/14      331
...                        A-22    09/12/12      656
                           P-63    01/02/12      1024
                           ...

是否有一种方法可以将每个Tag的最近,第二最近,第三等等等长度返回为不同的字段?

我理想的最终产品如下所示:

[Tag] [Most recent length] [Second most recent] [third most] ...
A-22          265                  331              656
P-63          1024
...

这个问题特别棘手,因为我最近从MySQL移植了该问题,它具有LIMIT子句,可以轻松解决此问题。我知道没有直接的等效项(来自MS Access Limit),但是我想知道是否还有其他方法可以实现我所需要的。

1 个答案:

答案 0 :(得分:1)

多亏了HansUp和Foxfire,我才找到了解决方案。在此处发布信息可能会帮助其他有类似问题的人。

第一步是从Certs表构造一个排名查询:

SELECT t1.[Tag], t1.[Date], t1.[Length], COUNT(t1.[Date]) AS Rank
FROM [Certs] AS t1, [Certs] AS t2
WHERE (t1.[Date] <= t2.[Date]) AND t1.[Tag] = t2.[Tag]
GROUP BY t1.[Tag], t1.[Date], t1.[Length]
ORDER BY t1.[Tag];

哪个给出了结果:

[Tag]    [Date]     [Length]   [Rank]
A-22    03/05/17      265        1
A-22    15/02/14      331        2
A-22    09/12/12      656        3
P-63    01/02/12      1024       1
...

从那里开始,向导会以[Tag]作为行标题,[Rank]作为列标题以及MAX([Length])作为值构造一个简单的交叉表查询,从而在问题中生成所需的表。