Tôi đã thấy khá một số giải pháp về các loại vấn đề, nhưng không ai trong số này dường như thích hợp:Chọn hàng với Max Giá trị được phân nhóm theo hai cột
Tôi có bảng sau bố trí, một phiên bản của file đính kèm, được liên kết với các đơn vị:
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 |
+------+--------------+----------+----------------+---------------+
Output nên Max số phiên bản, nhóm lại theo GROUP_ID và ENTITY_ID, tôi chỉ cần một danh sách cho entity_ids duy nhất nếu giúp:
+------+--------------+----------+----------------+---------------+
| 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 |
+------+--------------+----------+----------------+---------------+
Những gì tôi đã đưa ra là tự này tham gia vào một:
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
Nhưng cái này chỉ hoạt động nếu thực thể khác nhau không chia sẻ số cùng một nhóm. Điều này, thật không may là cần thiết.
Tôi đã xem xét giải pháp làm việc trong khi tạo chế độ xem nhưng điều này không được hỗ trợ trong thiết lập hiện tại của tôi.
Bất kỳ ý tưởng nào được đánh giá cao. Cảm ơn!
Cảm ơn bạn! Đây là một giải pháp rất đơn giản. –
Tôi sẽ ít nhất đảm bảo bạn thêm khóa mà tôi đề xuất để duy trì hiệu suất bảng, vì vậy entitiy_id, group_id và version_number. Trong câu hỏi của bạn, bạn đã chỉ định nó là dành cho id thực thể duy nhất và tùy chọn này sẽ hoạt động chậm hơn các đề xuất khác ở khối lượng bảng cao hơn do entity_id không được sử dụng để giới hạn tham gia. –
-1 cho Không ANSI –