多次尝试此查询,感觉我只是错过了一些简单的事情。
这个例子: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具有相等的值?
任何帮助将不胜感激。谢谢!
答案 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中的任何其他记录(因为你处理的不仅仅是我),但是使用你提供的样本数据似乎有效。