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

时间:2013-05-21 10:52:26

标签: sql-server tsql

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

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

干杯, 马特

1 个答案:

答案 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