0

レコードが更新されないテーブルを使用しています。変更が発生すると、新しいリビジョンが挿入されます。リビジョンは、シリアル フィールドと場所フィールドによって関連付けられます。つまり、同じテーブル内のプライマリ レコードとそれに対応するリビジョンには、その場所内で一意のシリアル番号がありますが、シリアルは別の場所で再利用される可能性があります。リビジョン フィールドは、リビジョンごとに 1 ずつ増加します。

ステータスが 4、5、または 6 のすべてのレコードを選択しようとしていますが、シリアル番号と場所が一致するレコードよりも高いリビジョン番号を持つレコードは他にありません。これを行う方法がわかりません。

CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`serial` int(10) NOT NULL DEFAULT '0',
`location` int(10) NOT NULL DEFAULT '0',
`revision` int(3) NOT NULL DEFAULT '0',
`status` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
4

1 に答える 1

2

サブクエリを使用する必要があります:

更新しました

SELECT * FROM table t1
WHERE location = 'location' 
AND status IN (4,5,6) 
AND revision = (SELECT MAX(revision) FROM table t2 WHERE t2.serial = t1.serial AND t2.location = t1.location)
于 2013-01-28T19:15:48.110 に答える