2列でグループ化された最大値を持つ行が、これらのどれが適切であるように思われる:を選択し、私はこの種の問題にかなりの数のソリューションを見てきました
私は次の表を持っていますレイアウト、エンティティにバインドされている添付ファイルのバージョン管理:
TABLE attachments
+------+--------------+----------+----------------+---------------+
| id | entitiy_id | group_id | version_number | filename |
+------+--------------+----------+----------------+---------------+
| 1 | 1 | 1 | 1 | file1-1.pdf |
| 2 | 1 | 1 | 2 | file1-2.pdf |
| 3 | 1 | 2 | 1 | file2-1.pdf |
| 4 | 2 | 1 | 1 | file1-1.pdf |
| 5 | 2 | 1 | 2 | file1-2.pdf |
| 6 | 2 | 3 | 1 | file3-1.pdf |
+------+--------------+----------+----------------+---------------+
出力が最大のバージョン番号でなければなりませんそれが助け場合、GROUP_IDとENTITY_IDによってグループ化され、私は単一entity_idsためのリストを必要とするだけだろう:
+------+--------------+----------+----------------+---------------+
| id | entitiy_id | group_id | version_number | filename |
+------+--------------+----------+----------------+---------------+
| 2 | 1 | 1 | 2 | file1-2.pdf |
| 3 | 1 | 2 | 1 | file2-1.pdf |
| 5 | 2 | 1 | 2 | file1-2.pdf |
| 6 | 2 | 3 | 1 | file3-1.pdf |
+------+--------------+----------+----------------+---------------+
私が出ていることは、この自己では1に参加:
SELECT *
FROM `attachments` `attachments`
LEFT OUTER JOIN attachments t2
ON (attachments.group_id = t2.group_id
AND attachments.version_number < t2.version_number)
WHERE (t2.group_id IS NULL)
AND (`t2`.`id` = 1)
GROUP BY t2.group_id
しかし、異なるエンティティが同じグループ番号を共有していない場合は、この1にのみ機能します。これは残念なことに必要です。
ビューを作成中に問題の解決策を見つけましたが、現在の設定ではサポートされていません。
どのようなアイデアも高く評価されています。ありがとう!
ありがとうございます!これは非常に簡単な解決策です。 –
少なくとも、テーブルのパフォーマンスを維持するために提案したキー(entitiy_id、group_id、およびversion_number)を追加することをお勧めします。あなたの質問では、単一のエンティティIDのために指定されていました。このオプションは、結合を制限するためにentity_idが使用されていないため、より高いテーブルボリュームで他の提案より遅く実行されます。 –
-1(非ANSIの場合) –