我有一个表,其中包括ID,人名,然后是一些其他数据。 我正在尝试编写一个查询,该查询仅为每个人返回 10 行(理想情况下是 10 个随机行,但如果必须是每个人的前 10 行,那就足够了(。 我发现 SQL 从表中返回 10 行随机行,但不是每人返回 10 行。 这说明了如何在 Oracle 中解决它,但我在 Access 中无法做到这一点:SQL 每行返回 n 行值
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 条(。
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
下面的代码为可以找到的每个名称返回 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 选择按多个字段分组的前 n 个查询只是根据您的需要对其进行了修改。
亲切问候
沃特