簡體   English   中英

row_number()記錄范圍內的SQL Server唯一記錄

[英]SQL Server unique records in row_number() range of records

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) 

上面的查詢有效,並將所有用戶ID從第1行(opt_start)拉到10,000(opt_end)。 在該數據集中,那些UserID是重復的。 我現在想為該行范圍(1到10,000)中的記錄提取唯一的UserID。 用戶可以選擇任意范圍,因此可以選擇10,0000到20,0000,因此查詢應獲取該范圍內的唯一UserID,依此類推。 我不需要結果中的rownum。

樣本數據:

1   dced6f0d-3a67-456d78cb7-fb73c8db0c13    4b1fbf7aa7
2   dced6f0d-3a67-456d78cb7-fb73c8db0c13    4b1fbf7aa7
3   6360f485-4f4d-4c9a98b0e-74fea312a25d    4b1fbf7aa7
4   6360f485-4f4d-4c9a98b0e-74fea312a25d    4b1fbf7aa7

結果將是:

dced6f0d-3a67-456d78cb7-fb73c8db0c13    4b1fbf7aa7
6360f485-4f4d-4c9a98b0e-74fea312a25d    4b1fbf7aa7

不知道如何繼續,或者可能有比row_number()更好的方法。 任何建議將不勝感激。

可以通過采用現有查詢並將其轉換為嵌入式視圖( T2 ),然后從中查詢不同的記錄來解決此問題:

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 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) 

您可以通過userID添加一個名為partition的片段

    ;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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM