Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL Selecione apenas linhas com valor mínimo em uma coluna com condição Where


Você pode começar selecionando o orderIndex mínimo de produtos que não são rejeitados assim:
SELECT productId, MIN(orderIndex)
FROM myTable
WHERE rejected = 0
GROUP BY productId;

Depois de ter isso, você pode juntá-lo à sua tabela original com a condição de que productId e minOrderIndex correspondam:
SELECT m.id, m.productId, m.orderIndex
FROM myTable m
JOIN(
  SELECT productId, MIN(orderIndex) AS minOrderIndex
  FROM myTable
  WHERE rejected = 0
  GROUP BY productId) tmp ON tmp.productId = m.productId AND tmp.minOrderIndex = m.orderIndex;

Minha consulta assume que não há pares duplicados (productId, orderIndex). Enquanto eles não existirem, isso funcionará muito bem. Aqui está um SQL Fiddle exemplo.