T-SQL:按列获取前n个记录

Bob*_*way 2 t-sql sql-server

挣扎着可能是一个非常简单的问题.我有这样的查询:

 ;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个记录,按日期排序.看到我已经在我的子查询中有一个排名来按日期排序项目重复,我看不到这样做的简单方法.

干杯,马特

Lud*_*uer 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
Run Code Online (Sandbox Code Playgroud)