2012-02-02 31 views
0

我遇到查詢問題,我希望它根據最後一次更改記錄的時間對結果進行排名。ROW_NUMBER和PARTITION查詢返回排名爲1的所有行

SELECT 
    ROW_NUMBER() OVER (PARTITION BY ph.pricingHistoryId ORDER BY ph.changeRecorded DESC), 
    ph.* 
FROM 
    PriceHistory ph 

它返回所有1的排名。

+0

是ph.pricingHistoryId是否唯一?行號應用於每個分區併爲下一個分區重置。 – Glenn 2012-02-02 00:54:54

+0

是的,它是唯一的 - 表的主鍵 – Sam 2012-02-02 00:55:12

+1

然後,你需要分割你想要編號的組。如果整個設置,刪除整個「PARTITION BY ph.pricingHistoryId」部分。 – Glenn 2012-02-02 00:57:34

回答

4

如果pricingHistoryId是主鍵,通過它進行分區總是返回秩爲1,因爲不能有重複的主鍵!

1

將行號應用於每個分區並重置爲下一個分區。你需要「劃分」你想要編號的組。如果您希望在整個結果集中使用一個序列,請完全刪除「PARTITION BY ph.pricingHistoryId」,只保留「ORDER BY」部分。

0

同意@Akhil。這意味着ph.pricingHistoryId是唯一的。