记录的行数()范围中的SQL Server唯一记录
上面的查询工作并将所有UserID从第1行(opt_start)拉到第10000行(opt_end)。在该数据集中,这些用户ID是重复的。现在,我想为该行范围(1到10000)中的记录提取唯一的UserID。用户可以选择任何范围,这样他们就可以选择100000到200000,这样查询就应该得到该范围内的唯一用户ID,依此类推。我不需要结果中的rownum 样本数据:记录的行数()范围中的SQL Server唯一记录,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,上面的查询工作并将所有UserID从第1行(opt_start)拉到第10000行(opt_end)。在该数据集中,这些用户ID是重复的。现在,我想为该行范围(1到10000)中的记录提取唯一的UserID。用户可以选择任何范围,这样他们就可以选择100000到200000,这样查询就应该得到该范围内的唯一用户ID,依此类推。我不需要结果中的rownum 样本数据: SELECT * FROM ( SELECT row_number() OVER (ORDER
SELECT
*
FROM (
SELECT
row_number() OVER (ORDER BY ID) AS [rownum],
UserID, wfoKey
FROM
tbl_user_statistics2 Where (wfoKey = '4b1fbf7aa7')
) T
WHERE
rownum BETWEEN (@opt_start) AND (@opt_end)
结果将是:
1 dced6f0d-3a67-456d78cb7-fb73c8db0c13 4b1fbf7aa7
2 dced6f0d-3a67-456d78cb7-fb73c8db0c13 4b1fbf7aa7
3 6360f485-4f4d-4c9a98b0e-74fea312a25d 4b1fbf7aa7
4 6360f485-4f4d-4c9a98b0e-74fea312a25d 4b1fbf7aa7
不确定如何继续,或者可能有比上面的行数()更好的方法。如果您有任何建议,我们将不胜感激。这可以通过将您现有的查询转换为在线视图(
T2
)然后从中查询不同的记录来解决:
dced6f0d-3a67-456d78cb7-fb73c8db0c13 4b1fbf7aa7
6360f485-4f4d-4c9a98b0e-74fea312a25d 4b1fbf7aa7
;With CTE1
AS
(
SELECT * , rn = ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY wfoKey)
FROM tbl_user_statistics2
Where wfoKey = '4b1fbf7aa7'
),
CTE2
AS
(
SELECT ID, UserID, wfoKey
, RowNum = ROW_NUMBER() OVER (ORDER BY wfoKey)
FROM CTE1
WHERE rn = 1
)
SELECT ID, UserID, wfoKey
FROM CTE2
WHERE RowNum BETWEEN (@opt_start) AND (@opt_end)
您可以添加一个名为partitionbyuserid的部分
SELECT DISTINCT UserID, wfoKey FROM
(SELECT
*
FROM (
SELECT
row_number() OVER (ORDER BY ID) AS [rownum],
UserID, wfoKey
FROM
tbl_user_statistics2 Where (wfoKey = '4b1fbf7aa7')
) T
WHERE
rownum BETWEEN (@opt_start) AND (@opt_end)) T2
;with cte as(
SELECT
*
FROM (
SELECT
row_number() OVER (partition by USerID ORDER BY ID) AS [rownum],
UserID, wfoKey
FROM
tbl_user_statistics2 Where (wfoKey = '4b1fbf7aa7')
) T
WHERE
rownum BETWEEN (@opt_start) AND (@opt_end)
)
Select * from cte
where rownum =1