2010-09-06 68 views
0

我在SQL Server 2005中,看起來像選擇前5個唯一行,在SQL Server 2005中隨機排序?

1 | bob | joined 
2 | bob | left 
3 | john | joined 
4 | steve | joined 
5 | andy | joined 
6 | kyle | joined 

我想是給別人拉了5個隨機用戶的活動能力的表(展示他們最新的活動)

例如:我想返回結果1,3,4,5,6 - 或 - 2,3,4,5,6 - 但從不 - 1,2,3,4,5(因爲1和2是來自同一用戶的活動,我不希望他出現兩次犧牲一個不同的獨特用戶,可能會顯示他們的活動)

我想嘗試像SELECT TOP(5) FROM table ORDER BY NEWID()以獲得前5和隨機方面去,但是當我嘗試合併UNIQUE或DISTINCT任何地方(停止從接收回第1行和第2行)我得到SQL錯誤,我不知道如何進展

+0

如果我們知道你的SQL到目前爲止還有什麼錯誤以及系統拋出什麼錯誤,我們可以提供更多的幫助...... – Frankie 2010-09-06 03:58:13

回答

1
select top 5 name, id from (
    select top 99.999 PERCENT name,id, NEWID() dummy from sysobjects 
    order by dummy) dummyName 

這個工程只需更換你想要

1

使用CTE的那些列名和表:

WITH cte AS (
    SELECT t.id, 
      t.name, 
      t.txt, 
      ROW_NUMBER() OVER(PARTITION BY t.name 
           ORDER BY NEWID()) AS rank 
    FROM TABLE t) 
    SELECT TOP 5 
     c.id, 
     c.name, 
     c.txt 
    FROM cte c 
    WHERE c.rank = 1 
ORDER BY NEWID() 

非CTE相當於:

SELECT TOP 5 
     c.id, 
     c.name, 
     c.txt 
    FROM (SELECT t.id, 
       t.name, 
       t.txt, 
       ROW_NUMBER() OVER(PARTITION BY t.name 
             ORDER BY NEWID()) AS rank 
      FROM TABLE t) c 
    WHERE c.rank = 1 
ORDER BY NEWID()