我有一张表,其中包含ID,人物姓名,以及其他一些数据。我试图编写一个查询,每个人只返回10行(理想情况下是10个随机行,但如果它必须是每个人的前10行,那就足够了)。我发现SQL从表中返回10个随机行,但不是每人10行。这告诉我们如何在Oracle中解决它,但是我在Access中无法做到这一点:SQL return n rows per row value
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
编辑:我现在根据发布到评论的链接尝试了这个,它只返回一条记录(对于表中只有一条记录的人 - 所有其他记录都超过10条)。 / p>
SELECT a.ID, a.mapped_prov_name, Count(*) AS rank_number
FROM qryJustNames AS a
INNER JOIN qryJustNames AS b ON a.mapped_prov_name = b.mapped_prov_name
GROUP BY a.ID, a.mapped_prov_name
HAVING COUNT(*) <= 10
ORDER BY a.mapped_prov_name
答案 0 :(得分:0)
以下代码为每个可以找到的名称返回10个随机数据行。
SELECT yt.id, yt.name, yt.data
FROM yourtable yt
WHERE id IN
(
SELECT TOP 10 id
FROM yourtable
WHERE name = yt.name
ORDER BY rnd(yt.id)
)
ORDER BY id, name
我在这里找到了答案:MS Access Select top n query grouped by multiple fields 只是根据您的需要进行了修改。
亲切的问候,
的Wouter