我有这样的查询:
SELECT TOP(1000) UserId, Key, Value
FROM MyTable
WHERE Processed = 'false' ORDER BY TimeStamp"
我正在迭代结果并将数据导入外部系统。这个速度相当慢,所以我想对结果集中的所有1000个项目并行运行这些操作。只有在结果集中没有重复的UserId时才可以这样做。
我已尝试在客户端上进行过滤,但最终我得到了一个可能有来自前1000个成员的400个成员的集合。这导致在不同的迭代中多次通过线路发送大量数据。
有没有办法构建我的查询,以便它返回前1000行,每个UserId只占一行?它可能会返回稍微更新的记录,但我希望结果集中只有1000个唯一的userIds。有这个语法吗?
答案 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;