Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL Sélectionnez uniquement les lignes avec une valeur minimale sur une colonne avec la condition Where

Vous pouvez commencer par sélectionner le minimum de commandeIndex des produits qui ne sont pas rejetés comme ceci :

SELECT productId, MIN(orderIndex)
FROM myTable
WHERE rejected = 0
GROUP BY productId;

Une fois que vous avez cela, vous pouvez le joindre à votre table d'origine à condition que productId et minOrderIndex correspondent :

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;

Ma requête suppose qu'il n'y a pas de paires en double (productId, orderIndex). Tant que ceux-ci n'existent pas, cela fonctionnera très bien. Voici un SQL Fiddle exemple.