我在SQL Server2005中有一个表,它看起来像
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错误,并且我不知道如何进行。
发布于 2010-09-06 11:58:06
select top 5 name, id from (
select top 99.999 PERCENT name,id, NEWID() dummy from sysobjects
order by dummy) dummyName只需替换所需的列名和表即可
发布于 2010-09-06 12:00:19
使用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()https://stackoverflow.com/questions/3648905
复制相似问题