0

私は現在、アプリケーション アップデーターのバックエンドを作成しており、サーバーを使用してすべてのファイルとリビジョンを追跡しています。

現在、データベースに 2 つのテーブルがあります。

dev_version_control_files
Columns: FileID, FileName

dev_version_control_versions
Columns: VersionID, FileID, Version, DateReleased, FileLocation

ファイル テーブルは、バージョン管理下にあるファイルごとに 1 つのレコードを保持します。バージョン テーブルには、各ファイルのバージョンごとに、リリース日、バージョン番号、場所とともに 1 つのレコードが保持されます。

今私が欲しいのは、ファイル テーブル内のすべてのファイルの最後のレコード (更新) を取得することです。これは、リリースされたときからの UNIX タイムスタンプを保持する日付フィールドによって決定する必要があります。

更新要求が行われるたびにバージョン テーブルのすべての行を調べたくないので、1 つのクエリでこれを行うことは可能でしょうか?

4

3 に答える 3

4

私はSQLの専門家ではありませんが、これでうまくいくでしょうか?

SELECT f.*, v.DateReleased
FROM dev_version_control_files f
INNER JOIN (
  SELECT FileId, MAX(DateReleased) AS DateReleased
  FROM dev_version_control_versions
  GROUP BY 1) v ON f.FileID = v.FileID

versionsこれをサンプルテーブルでテストして確認します(一部の構文がオフになっている可能性があります)が、テーブルから最大日付を取得してIDでグループ化し、IDでテーブルに結合するという考え方ですfiles 。これはあなたがすでにやっていたことですか?

于 2012-08-14T04:27:36.890 に答える
4

後で参加するDateReleasedたびに、最初に最大値を取得する必要があります。FileIDdev_version_control_filesdev_version_control_versions

SELECT a.*, b.Version, DateReleased
FROM    dev_version_control_files a 
            INNER JOIN dev_version_control_versions b
                on a.FileID = b.FileID
            INNER JOIN
            (
                SELECT FileID, MAX(DateReleased) MaxDate
                FROM dev_version_control_versions
                GROUP BY FileID
            ) c ON b.FileID = c.FileID AND
                   b.DateReleased = c.MaxDate
于 2012-08-14T04:46:39.840 に答える
1

2 番目のテーブルに少なくとも 1 つのバージョン レコードがあるとします。

SELECT FileID, FileName, MAX(DateReleased)
FROM dev_version_control_files
INNER JOIN dev_version_control_versions ON FileID
GROUP BY FileID, FileName

これは正確な SQL ではありません。これは、私がこれをどのように行うかについての大まかな考えです。

于 2012-08-14T04:30:19.407 に答える