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
trabajará en algunos 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)
funcionará en la mayoría de los 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
)
funcionará en todos los 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
Y si nate c la intención del código es obtener solo una fila de product_price, no es necesario table-derive (es decir join (select product_price_id, max(date_updated) from products_price) as pp_max
), que puede ser que también acaba de simplificar (es decir, sin necesidad de utilizar la clave primaria sustituta product_price_id) es similar a la siguiente:.
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)
Puede explicar lo que le gustaría a pasar? ¿Quieres ordenar por el máximo del grupo? ¿Quieres unirte solo a la última actualización? Quizás algunos datos de ejemplo y el resultado esperado de esos datos ayudarían a aclarar su pregunta. –
¿Por qué no unirse internamente? –
Tengo un producto con 5 precios diferentes con diferentes fechas de 'fecha_actualizadas'. Necesito unirme y sacar el último precio. – Simon