我看到的这样那样的问题相当多的解决方案,但这些都不似乎是适当的:选择行
我有以下表布局,附件,这必将对实体的一个版本:
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 |
+------+--------------+----------+----------------+---------------+
我已经想出这是自联接之一:
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
但是这一个,如果不同的实体不共享同一组号码才有效。这不幸是必要的。
我在创建视图时遇到了一个工作解决方案,但在当前的设置中不支持此解决方案。
任何想法,高度赞赏。谢谢!
谢谢!这是一个非常简单的解决方案。 – 2012-02-20 11:20:58
我至少会确保你添加了我建议维护表的性能的密钥,所以entitiy_id,group_id和version_number。在您指定的问题中,它是针对单个实体ID的,并且由于entity_id没有用于限制连接,因此此选项的执行速度比其他建议在较高表格卷上的速度要慢。非ANSI的 – 2012-02-20 11:23:41
-1 – 2012-02-20 11:24:10