MS-Access SELECT TOP N子查询SQL

时间:2014-11-24 14:44:00

标签: sql ms-access subquery top-n

多次尝试此查询,感觉我只是错过了一些简单的事情。

这个例子:aggregation subquery with top N接近我想要完成的事情,但不是平均距离我只想返回前N个距离和shopIDs。

在我的数据中,值类似于数字分数,值越高越好。我的目标是获得一个列表,显示前2个最差的得分SubTypeNames以及每个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具有相等的值?

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

1 个答案:

答案 0 :(得分:0)

试试这个:

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中的任何其他记录(因为你处理的不仅仅是我),但是使用你提供的样本数据似乎有效。

相关问题