Mysqlism:
SELECT p.*, MAX(pp.date_updated), pp.price
FROM products p
LEFT JOIN product_price pp ON pp.product_id = p.product_id
GROUP BY p.product_id
Lavoreranno su alcuni RDBMS:
SELECT p.*, pp.date_updated, pp.price
FROM products p
LEFT JOIN product_price pp ON pp.product_id = p.product_id
WHERE (p.product_id, pp.date_updated)
in (select product_id, max(date_updated)
from product_price
group by product_id)
lavorerà sulla maggior parte dei RDBMS:
SELECT p.*, pp.date_updated, pp.price
FROM products p
LEFT JOIN product_price pp ON pp.product_id = p.product_id
WHERE EXISTS
(
select null -- inspired by Linq-to-SQL style :-)
from product_price
WHERE product_id = p.product_id
group by product_id
HAVING max(date_updated) = pp.date_updated
)
funziona su tutti i RDBMS:
SELECT p.*, pp.date_updated, pp.price
FROM products p
LEFT JOIN product_price pp ON pp.product_id = p.product_id
LEFT JOIN
(
select product_id, max(date_updated) as recent
from product_price
group by product_id
) AS latest
ON latest.product_id = p.product_id AND latest.recent = pp.date_updated
E se l'intento del codice nate c è di ottenere solo una riga da product_price, non è necessario derivante dalla tabella (ad es. join (select product_price_id, max(date_updated) from products_price) as pp_max
), si potrebbe anche solo di semplificare (cioè senza necessità di utilizzare la chiave primaria surrogata product_price_id) è simile al seguente:.
SELECT p.*, pp.date_updated, pp.price
FROM products p
LEFT JOIN product_price pp ON pp.product_id = p.product_id
WHERE pp.date_updated = (select max(date_updated) from product_price)
si può spiegare che cosa vorreste per accadere? Vuoi ordinare dal massimo del gruppo? Vuoi partecipare solo con l'ultimo aggiornamento? Forse alcuni dati di esempio e l'output previsto per tali dati potrebbero aiutare a chiarire la tua domanda. –
Perché non unirsi interiore? –
Ho un prodotto con 5 prezzi diversi, con datetimes diversi 'date_updated'. Ho bisogno di unire e tirare fuori l'ultimo prezzo. – Simon