选择具有唯一ID的顶级记录

时间:2013-05-01 20:33:22

标签: sql sql-server-2008 distinct

我有这样的查询:

SELECT TOP(1000) UserId, Key, Value 
FROM MyTable 
WHERE Processed = 'false' ORDER BY TimeStamp"

我正在迭代结果并将数据导入外部系统。这个速度相当慢,所以我想对结果集中的所有1000个项目并行运行这些操作。只有在结果集中没有重复的UserId时才可以这样做。

我已尝试在客户端上进行过滤,但最终我得到了一个可能有来自前1000个成员的400个成员的集合。这导致在不同的迭代中多次通过线路发送大量数据。

有没有办法构建我的查询,以便它返回前1000行,每个UserId只占一行?它可能会返回稍微更新的记录,但我希望结果集中只有1000个唯一的userIds。有这个语法吗?

1 个答案:

答案 0 :(得分:3)

SELECT TOP(1000) UserId, [Key], Value 
FROM
 (SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY UserId order by TimeStamp)
  FROM MyTable 
  WHERE Processed = 'false') X
WHERE RN=1
ORDER BY TimeStamp;