记录的行数()范围中的SQL Server唯一记录

记录的行数()范围中的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

上面的查询工作并将所有UserID从第1行(opt_start)拉到第10000行(opt_end)。在该数据集中,这些用户ID是重复的。现在,我想为该行范围(1到10000)中的记录提取唯一的UserID。用户可以选择任何范围,这样他们就可以选择100000到200000,这样查询就应该得到该范围内的唯一用户ID,依此类推。我不需要结果中的rownum

样本数据:

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