繁体   English   中英

MS-Access SELECT TOP N子查询SQL

[英]MS-Access SELECT TOP N subquery SQL

多次尝试此查询,感觉就像我只是缺少一些简单的东西。

此示例: 具有最高N的聚合子查询与我要完成的工作很接近,但是我不想平均距离,而只想返回最高N的距离和shopID。

在我的数据中,值类似于数字分数,较高的值是不好的。 我的目标是获得一个列表,该列表显示得分最高的2个SubTypeName及其每个StationId的得分。

我的样本表:(复合PK:StationId和SubTypeId)

StationId | SubTypeId | SubTypeName | Value

STA001 | 1 | TypeA | 4.63
STA001 | 2 | TypeB | 2.57
STA001 | 3 | TypeC | 3.54
STA001 | 4 | TypeD | 4.19
STA001 | 5 | TypeE | 1.61
STA002 | 1 | TypeA | 5.12
STA002 | 2 | TypeB | 4.57
STA002 | 3 | TypeC | 1.28
STA002 | 4 | TypeD | 1.27
STA002 | 5 | TypeE | 3.33
STA003 | 1 | TypeA | 4.51
STA003 | 2 | TypeB | 4.51
STA003 | 3 | TypeC | 5.63
STA003 | 4 | TypeD | 1.28
STA003 | 5 | TypeE | 3.25

对于50多个电台重复此模式。

我的UPDTAED输出:(来自下面的查询)

StationId | SubTypeName | Value

STA001 | TypeA | 4.63
STA001 | TypeD | 4.19
STA002 | TypeA | 5.12
STA002 | TypeB | 4.57
STA003 | TypeC | 5.63
STA003 | TypeA | 4.51
STA003 | TypeB | 4.51

我最近的尝试:

SELECT c.StationId, c.SubTypeName, c.Value
FROM [TT: StationSubType Values] As c
WHERE c.SubTypeId IN
(SELECT TOP 2 c2.SubTypeId FROM  [TT: StationSubType Values] As c2 WHERE c2.StationId = c.StationId
ORDER BY c2.Value DESC)
ORDER BY c.StationId ASC, c.Value DESC;

更新:我有上面的查询按预期工作ALMOST。 仍然存在的问题是由于与某人在其注释中预示的相同站点上的重复值。 出于此查询的目的,我只需要TOP N,是否有办法只取n个结果的第一个SubTypeId值相等?

任何帮助将不胜感激。 谢谢!

尝试这个 :

SELECT  c.SubTypeName,
        c.StationId,
        c.Value

FROM [Sample] AS c
WHERE c.SubTypeId IN

            (SELECT TOP 2 c2.SubTypeId 
             FROM  [Sample] As c2 
             WHERE c2.StationId = c.StationId
             ORDER BY c2.Value DESC, c2.subtypeid)

ORDER BY c.StationId ASC, c.Value DESC

我不确定该解决方案是否会影响Db中的任何其他记录(因为您要处理的不仅仅是我),但是使用您提供的样本数据似乎可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM