我有一个名为 Packages 的表,其中包含一些数据和一个包含其他信息的相关表。它是这样设置的:
Name|Version|Architecture|Date|id
在另一个名为 Distribution 的表中,我有这个:
repo|id
id 相互引用。我希望能够获得某个分组的最新(按日期排序)。我想按名称、架构和存储库分组。问题是我似乎无法让正常的 best-n-group 正常工作,因为我必须跨表。这是我到目前为止所拥有的
select
p1.Name,
p1.Version,
p1.Arch,
d1.repo,
p1.Date
from Packages as p1
inner join Distribution as d1
on p1.id = d1.id
inner join (
select
Name,
Arch,
repo,
max(Date) as Date
from Packages
inner join Distribution
on Packages.id = Distribution.id
group by
Name,
Arch,
repo
) as sq
on p1.Name = sq.Name and p1.Arch = sq.Arch and d1.repo = sq.repo and p1.Date = sq.Date
问题是它似乎没有正确地对 repo 进行分组。它没有给我一个独特的回购。
编辑:我想为每个 repo 获取最新版本。所以我必须在每个回购中获得最大日期,然后进行分组。
编辑 2:我使用了一个答案来得到这个:
select p1.Name, p1.Version, p1.Arch, d1.repo, p1.Date
from Packages as p1 inner join
Distribution as d1
on p1.id = d1.id inner join (
select Name, Arch, repo, max(Date) as Date
from Packages inner join Distribution
on Packages.id = Distribution.id
group by Name, Arch, repo
) as sq
on p1.Name = sq.Name and p1.Arch = sq.Arch and d1.repo = sq.repo and p1.Date = sq.Date
这似乎对我有用。