2013-05-06 75 views
1

问候所有国家的SQL人员。SQL每行返回n行值

简单的问题,希望一个简单的答案。

我有一个Oracle数据库表与人的信息。栏目有:

FirstName, LastName, BirthDate, BirthCountry 

让我们在这个表说我出生在阿鲁巴(BirthCountry = “阿鲁巴”),678个Botswanans(BirthCountry = “博茨瓦纳”),13338名加拿大人(BirthCountry = “加华”)1500人。

我需要写什么查询从每个国家提取10条记录的样本批次?无论哪10个,只要有10个都没关系。

这一个查询会输出30行,每个BirthCountry有10行。

回答

4

这将从每个国家选择10人年龄最小:

SELECT * 
FROM (
     SELECT p.*, 
       ROW_NUMBER() OVER (PARTITION BY birthCountry ORDER BY birthDate DESC) rn 
     FROM persons p 
     ) 
WHERE rn <= 10 
+0

+1假设甲骨文11G – sgeddes 2013-05-06 13:31:30

+1

@ sgeddes:即使在8i中也能正常工作 – Quassnoi 2013-05-06 13:31:54

+0

我不知道 - 谢谢! – sgeddes 2013-05-06 13:32:29

1

这会挑选10分随机的人,不同的人在每次运行查询时间:

select * 
from (
     select row_number() over (partition by BirthCountry 
            order by dbms_random.value) as rn 
     ,  FirstName 
     ,  LastName 
     ,  BirthDate 
     ,  BirthCountry 
     from YourTable 
     ) 
where rn <= 10 
+0

+1随机结果 – sgeddes 2013-05-06 13:37:14