MySql:Raggruppare ed esporre l'ultimo record
Soluzione #1
Ad esempio: prendendo in considerazione un listino prezzi ( in questo esempio: listino fasi di lavoro ) e produrre una lista degli ultimi prezzi ( i più recenti come data attivazione ), è necessario ordinare per prodotto e fase di lavoro ed estrarre solamente il prezzo più recente.
SELECT workphasepricelist.from_date, workphasepricelist.price FROM aker_workphasepricelists as workphasepricelist WHERE workphasepricelist.id = ( SELECT id FROM aker_workphasepricelists WHERE workphasetype_id = workphasepricelist.workphasetype_id AND product_id = workphasepricelist.product_id ORDER BY from_date DESC LIMIT 1 )
Soluzione #2
Dati: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_2 3 A A_data_3 4 B B_data_1 5 B B_data_2 6 C C_data_1 |
Voglio ottenere: Id Name Other_Columns ------------------------- 3 A A_data_3 5 B B_data_2 6 C C_data_1 |
SELECT m1.* FROM messages m1 LEFT JOIN messages m2 ON (m1.name = m2.name AND m1.id < m2.id) WHERE m2.id IS NULL;
In mysql 8
WITH ranked_messages AS ( SELECT m.*, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) AS rn FROM messages AS m ) SELECT * FROM ranked_messages WHERE rn = 1;
fonte: https://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group-mysql