ho visto alcune soluzioni abbastanza su questo tipo di problema, ma nessuno di questi sembra essere appropriato:Selezionare le righe con Max Valore raggruppate per due colonne
ho la seguente tabella il layout, una delle versioni di allegati, che sono destinati a entità:
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 |
+------+--------------+----------+----------------+---------------+
uscita dovrebbe essere Max numero di versione, raggruppati per group_id e ENTITY_ID, avevo solo bisogno di una lista per singoli entity_ids se questo aiuta:
+------+--------------+----------+----------------+---------------+
| 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 |
+------+--------------+----------+----------------+---------------+
Quello che ho venire in mente è questa auto unire 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
Ma questo funziona solo se entità diverse non condividono i numeri stesso gruppo. Questo, purtroppo, è necessario.
Mi sono imbattuto in una soluzione funzionante durante la creazione di una vista, ma questo non è supportato nella mia configurazione corrente.
Tutte le idee sono molto apprezzate. Grazie!
Grazie! Questa è una soluzione molto semplice. –
Vorrei almeno assicurarmi di aggiungere la chiave che ho suggerito per mantenere le prestazioni della tabella, quindi entitiy_id, group_id e version_number. Nella tua domanda hai specificato che era per ID entità singola, e questa opzione sarà più lenta rispetto agli altri suggerimenti a volumi di tabelle più elevati a causa di entity_id che non viene utilizzato per limitare il join. –
-1 per non ANSI –