首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择SQL Server 2005中随机排序的前5个唯一行?

选择SQL Server 2005中随机排序的前5个唯一行?
EN

Stack Overflow用户
提问于 2010-09-06 11:49:49
回答 2查看 2K关注 0票数 0

我在SQL Server2005中有一个表,它看起来像

代码语言:javascript
复制
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,4,5(因为1和2是同一用户的活动,我不希望他出现两次,代价是可能会显示他们的活动的不同的唯一用户)

我尝试使用类似SELECT TOP(5) FROM table ORDER BY NEWID()的方法来获得前5个和随机方面,但是当我尝试在任何地方合并唯一或不同的方面(停止接收第1行和第2行)时,我得到SQL错误,并且我不知道如何进行。

EN

回答 2

Stack Overflow用户

发布于 2010-09-06 11:58:06

代码语言:javascript
复制
select top 5 name, id from (
    select top 99.999 PERCENT name,id, NEWID() dummy from sysobjects
    order by dummy) dummyName

只需替换所需的列名和表即可

票数 1
EN

Stack Overflow用户

发布于 2010-09-06 12:00:19

使用CTE:

代码语言:javascript
复制
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等效项:

代码语言:javascript
复制
  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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3648905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档