MySql:Raggruppare ed esporre l'ultimo record

Versione del 3 dic 2021 alle 09:31 di Andrea (discussione | contributi) (Creata pagina con "← Torna a MySQL == Soluzione #1 == Ad esempio: prendendo in considerazione un listino prezzi ( in questo esempio: listino fasi di lavoro ) e produrre...")
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

← Torna a MySQL


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