簡體   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