2
與可能非常簡單的問題展開鬥爭。我有這樣一個查詢:T-SQL:按列列出最多n條記錄
;WITH rankedData
AS (-- a big, complex subquery)
SELECT UserId,
AttributeId,
ItemId
FROM rankedData
WHERE rank = 1
ORDER BY datEventDate DESC
子查詢的目的是搶隔行數據的一大塊,並通過的itemId和日期排序,所以,在上面的查詢秩= 1,確保我們只得到獨特的ItemIds,按日期排序。分區是:
Rank() OVER (partition BY ItemId ORDER BY datEventDate DESC) AS rk
的問題是什麼,我要的是前75的記錄每一個用戶名,按日期排序。由於我已經在我的子查詢中獲得了一個排序來按日期排序項目重複,所以我看不到這樣做的簡單方法。
乾杯, 馬特
如果我理解正確OP他需要'每user' 75強唯一Itemids。 – Kaf
@Kaf,因爲這個查詢使用了CTE'rankingData'我相信這將會發生。或者說,從唯一列表中選擇這些行。但想一想,你可能有一點。只有OP會知道。 –
@MikaelEriksson:我明白你的意思了。謝謝。 OP中的用戶有一點誤解值得一提。用戶認爲**在上述查詢中「rank = 1確保我們只獲得唯一的ItemIds」**,但情況並非如此。我認爲他需要'row_number()'而不是'cte'中的rank()。 – Kaf