0

我有一个这样的查询:

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

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

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

有没有办法构造我的查询,以便它返回前 1000 行,每个 UserId 只占用一行?它可能会返回稍新的记录,但我希望结果集中恰好有 1000 个唯一用户 ID。有没有这样的语法?

4

1 回答 1

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;
于 2013-05-01T20:39:48.103 回答