Листинг ваши ожидаемые результаты могли бы помочь. Если вы действительно ищете макс (preco_id) и макс (preco_venda), то это может быть что-то вроде этого:
SELECT p.nome, c.centroide_produto_id, c.similar_produto_id
,x.max_preco_id
,x.preco_maximo
FROM produtos p
JOIN cluster_copy3 c ON (p.produto_id = c.centroide_produto_id AND
c.centroide_produto_id IN (9817, 9816)
)
JOIN (SELECT produto_id
,MAX(preco_id) max_preco_id
,MAX(preco_venda) preco_maximo
FROM precos
GROUP BY produto_id) x ON (x.produto_id = p.produto_id)
Выход:
| nome | centroide_produto_id | similar_produto_id | max_preco_id | preco_maximo |
|------------------------------------------------|----------------------|--------------------|--------------|--------------|
| My NY EDT Feminino 30ml | 9816 | 9816 | 31438 | 169 |
| My NY EDT Feminino 30ml | 9816 | 9819 | 31438 | 169 |
| Flower By Kenzo EDP Recarregável Feminino 30ml | 9817 | 9817 | 31455 | 149 |
| Flower By Kenzo EDP Recarregável Feminino 30ml | 9817 | 9830 | 31455 | 149 |
Если вы ищете макс (preco_venda) и ассоциированная preco_id, то, возможно, что-то вроде этого:
SELECT p.nome, c.centroide_produto_id, c.similar_produto_id
,y.preco_id
,y.preco_maximo
FROM produtos p
JOIN cluster_copy3 c ON (p.produto_id = c.centroide_produto_id AND
c.centroide_produto_id IN (9817, 9816)
)
JOIN (
SELECT x.produto_id, x.preco_maximo, MAX(p.preco_id) preco_id
FROM precos p
JOIN (SELECT produto_id
,MAX(preco_venda) preco_maximo
FROM precos
GROUP BY produto_id
) x ON (x.produto_id = p.produto_id AND
x.preco_maximo = p.preco_venda)
GROUP BY x.produto_id, x.preco_maximo
) y ON (y.produto_id = p.produto_id)
Выход:
| nome | centroide_produto_id | similar_produto_id | preco_id | preco_maximo |
|------------------------------------------------|----------------------|--------------------|----------|--------------|
| My NY EDT Feminino 30ml | 9816 | 9816 | 31438 | 169 |
| My NY EDT Feminino 30ml | 9816 | 9819 | 31438 | 169 |
| Flower By Kenzo EDP Recarregável Feminino 30ml | 9817 | 9817 | 31455 | 149 |
| Flower By Kenzo EDP Recarregável Feminino 30ml | 9817 | 9830 | 31455 | 149 |
Хотя выход такой же, это не максимальный id возвращаемого кластера, а идентификатор, связанный с max preco.
Update 1:
Опять же, я предполагаю, что на то, что вы ищете. Похоже, вы хотите получить только две строки. Для каждого интересующего продукта, найти самую последнюю цену всех связанных с ней продуктов (как определено в precos), а затем взять максимальную цену этих самых последних цен:
SELECT x.nome, x.centroide_produto_id, MAX(p2.preco_venda) AS venda_maximo
FROM (SELECT p.nome, c.centroide_produto_id, c.similar_produto_id, MAX(pr.preco_id) AS max_preco_id
FROM produtos p
JOIN cluster_copy3 c ON (p.produto_id = c.centroide_produto_id)
JOIN precos pr ON (pr.produto_id = c.similar_produto_id)
WHERE p.produto_id IN (9817, 9816)
GROUP BY p.nome, c.centroide_produto_id, c.similar_produto_id
) x
JOIN precos p2 ON (p2.preco_id = x.max_preco_id)
GROUP BY x.nome, x.centroide_produto_id
ORDER BY x.centroide_produto_id
Выход:
| nome | centroide_produto_id | venda_maximo |
|------------------------------------------------|----------------------|--------------|
| My NY EDT Feminino 30ml | 9816 | 243 |
| Flower By Kenzo EDP Recarregável Feminino 30ml | 9817 | 149 |
Это помогло бы, если бы мы знали, что вы пытаетесь сделать. Образцы данных и желаемые результаты всегда полезны. –
Привет, Гордон! Желаемые значения объясняются в sqlfiddle, как только здесь я не могу показать строки таблицы. – Ailton
Кто-нибудь, пожалуйста? С эскизом [this] (http://sencial.me/images/esquema_sql_preco.gif) вы можете лучше понять, что мне нужно. – Ailton