2014-11-24 138 views
1

多次嘗試此查詢,覺得我只是想念一些簡單的東西。MS-Access SELECT TOP N子查詢SQL

這個例子:aggregation subquery with top N已經接近我想要完成的事情,但是我並不想平均距離,而只想返回前N個距離和shopID。

在我的數據中,數值類似於數字分數,數值越高越差。我的目標是獲得一個列表,顯示每個StationId中排名前2的最差評分SubTypeNames及其得分。

我的試樣臺:(複合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; 

UPDATE:我上面的查詢預期ALMOST工作。仍然存在的問題是由於在同一個電臺上的重複值與他們評論中預示的人相同。 爲了這個查詢的目的,我只需要TOP N,是否有一種方法可以將n個結果的第一個SubTypeId與相等的值進行比較?

任何幫助將不勝感激。謝謝!

+0

不,在這種情況下,Value包含數字分數,其中較高的值是不好的。因此,我們的目標是顯示Station的兩個最差評分子類型。對不起,我不清楚,我已經編輯帖子相應地添加該上下文。 – aaronlee 2014-11-24 15:02:37

+0

您的表格設計是否允許同一* StationId *的重複*值*值?例如,它是否允許帶有* StationId STA001 *和* Value * 4.63的另一行? – HansUp 2014-11-24 15:24:42

+0

是的,這是可能的。但是,它將針對不同的SubTypeId,因爲該表具有組合PK。 – aaronlee 2014-11-24 15:45:14

回答

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 

我不知道,如果這個解決方案會影響你的數據庫的任何其他記錄(因爲你正在處理的比我多),但樣本數據的工作,你提供了這個似乎工作。