0

一部のデータを含む Packages というテーブルと、他の情報を含む関連テーブルがあります。次のように設定されています。

Name|Version|Architecture|Date|id

そして、Distribution という名前の 2 番目のテーブルには、次のようなものがあります。

repo|id

id は相互に参照します。特定のグループの最新 (日付順) を取得できるようにしたい。名前、アーキテクチャ、レポでグループ化したい。問題は、テーブルをまたがる必要があるため、通常のグループ内最大 n を正しく機能させることができないように見えることです。これは私がこれまでに持っているものです

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

問題は、リポジトリが正しくグループ化されていないように見えることです。それは私にユニークなレポを与えません。

編集:各レポの最新バージョンを取得したい。したがって、各レポで最大日付を取得してから、グループを作成する必要があります。

編集2:これを得るために、1つの答えを少し処理しました:

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

そして、それは私のために働いているようです。

4

1 に答える 1

1

repo最大クエリからを削除したいと思います:

select p1.Name, p1.Version, p1.Arch, d1.repo, p1.Date
from Packages p1 inner join
     Distribution d1
     on p1.id = d1.id inner join
     (select Name, Arch, max(Date) as Date
      from Packages
      group by Name, Arch
     ) sq
     on p1.Name = sq.Name and p1.Arch = sq.Arch and p1.Date = sq.Date;

編集:

すべてのリポジトリに日付があるわけではない場合は、サブクエリで分布によってフィルター処理する必要があります。repoただし、まだ集計に入れたくありません。

select p1.Name, p1.Version, p1.Arch, d1.repo, p1.Date
from Packages p1 inner join
     Distribution d1
     on p1.id = d1.id inner join
     (select Name, Arch, max(Date) as Date
      from Packages p join
           Distribution d
           on p.id = d.id
      group by Name, Arch
     ) sq
     on p1.Name = sq.Name and p1.Arch = sq.Arch and p1.Date = sq.Date;
于 2013-08-26T15:02:03.887 に答える