分组随机抽取记录

shirely2009 2018-12-12 10:10:49
一张表里面有ID,地区,地区代码等信息,我现在想每个地区随机抽取500条记录,应该怎么实现,注意不是前500条,而是随机抽取500条,ID是唯一标识符。
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-12-12
  • 打赏
  • 举报
回复
额,每个地区随机取……没看清楚,忽略1#,用2#的代码吧
Dear SQL(燊) 2018-12-12
  • 打赏
  • 举报
回复
以每个地区前2个为例
--测试数据
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([ID] int,area varchar(50),[Code] int)
Insert #T
select 1,'AA',10001 union all
select 2,'AA',10002 union all
select 3,'AA',10003 union all
select 4,'AA',10004 union all
select 5,'AA',10003 union all
select 6,'BB',10004 union all
select 7,'BB',10003 union all
select 8,'BB',10004 union all
select 9,'BB',10005

;
WITH LIST AS(
	SELECT *,RID=ROW_NUMBER()OVER(PARTITION BY area ORDER BY NEWID())
	FROM #T
)
SELECT *
FROM LIST
WHERE RID<=2

ID          area                                               Code        RID
----------- -------------------------------------------------- ----------- --------------------
2           AA                                                 10002       1
4           AA                                                 10004       2
9           BB                                                 10005       1
7           BB                                                 10003       2

二月十六 2018-12-12
  • 打赏
  • 举报
回复
用ORDER BY NEWID() ,写了个例子,5条数据随机抽取2条
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[Code] int)
Insert #T
select 1,10001 union all
select 2,10002 union all
select 3,10003 union all
select 4,10004 union all
select 5,10005
Go
--测试数据结束
Select TOP 2 * from #T ORDER BY NEWID()


二月十六 2018-12-12
  • 打赏
  • 举报
回复
引用 4 楼 shirely2009 的回复:
sql server 中怎么实现呢
用的就是sqlserver 上边建表的那些语句是测试用的,不用管
shirely2009 2018-12-12
  • 打赏
  • 举报
回复
sql server 中怎么实现呢

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧