我有数千行数据。其中两列称为Area和Sub Area。每个区域有大约4个,5个或更多个子区域。
我想为每个区域和子区域选择一个随机的记录样本,例如前10名,但不能想到如何有效或快速地做到这一点。
我考虑每次都选择UNION
每个区域和子区域,但我必须这样做120 UNION
个语句,因为有120行不同的区域和子区域。
当我考虑在Case
列表中执行SELECT
语句时,会出现同样的问题。
我想也许我可以用某种方式使用CTE
或WHILE LOOP
但没有太多运气。可以在这里使用Window函数吗?
有什么想法吗?
答案 0 :(得分:5)
您可以尝试以下方法为每个子区域选择随机的10条记录。
select *
from (select *,
row_number()
over(
partition by subarea
order by newid()) RN
from yourtable) T
where rn <= 10
在上面的查询中,order by newid()
会为您提供随机记录,而partition BY subarea
会为每个子区域生成不同的rownumber。