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