挣扎着可能是一个非常简单的问题.我有这样的查询:
;WITH rankedData
AS ( -- a big, complex subquery)
SELECT UserId,
AttributeId,
ItemId
FROM rankedData
WHERE rank = 1
ORDER BY datEventDate DESC
Run Code Online (Sandbox Code Playgroud)
子查询旨在获取大量的内联数据并按itemId和date排名,因此上述查询中的rank = 1可确保我们只获得按日期排序的唯一ItemIds.分区是:
Rank() OVER (partition BY ItemId ORDER BY datEventDate DESC) AS rk
Run Code Online (Sandbox Code Playgroud)
问题是,我想要的是每个UserID的前75个记录,按日期排序.看到我已经在我的子查询中有一个排名来按日期排序项目重复,我看不到这样做的简单方法.
干杯,马特
我认为您的查询应该是这样的
SELECT t.UserId, t.AttributeId, t.ItemId
FROM (
SELECT UserId, AttributeId, ItemId, rowid = ROW_NUMBER() OVER (
PARTITION BY UserId ORDER BY datEventDate
)
FROM rankedData
) t
WHERE t.rowid <= 75
Run Code Online (Sandbox Code Playgroud)