que he visto algunas soluciones bastante en este tipo de problemas, pero ninguno de ellos parecen ser apropiadas:seleccionar filas con Max Valor agrupadas por dos columnas
tengo la siguiente tabla diseño, un control de versiones de los archivos adjuntos, que están unidos a las entidades:
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 |
+------+--------------+----------+----------------+---------------+
salida debe ser el número máximo de versiones, agrupados por group_id y entity_id, yo solamente necesito una lista de entity_ids individuales si eso ayuda:
+------+--------------+----------+----------------+---------------+
| 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 |
+------+--------------+----------+----------------+---------------+
Lo que he llegado con este auto es unirse a uno:
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
Pero ésta sólo funciona si las diferentes entidades no comparten mismos números de grupo. Esto, desafortunadamente es necesario.
Encontré una solución de trabajo al crear una vista, pero esto no es compatible con mi configuración actual.
Todas las ideas son muy apreciadas. ¡Gracias!
Gracias! Esta es una solución muy simple. –
Al menos me aseguraría de agregar la clave que sugerí para mantener el rendimiento de la tabla, por lo entitiy_id, group_id y version_number. En su pregunta, usted especificó que era para identificación de entidad única, y esta opción funcionará más lentamente que las otras sugerencias en volúmenes de tabla superiores debido a que entity_id no se usa para limitar la unión. –
-1 para no ANSI –