sql >> Database >  >> RDS >> Mysql

SQL Selecteer alleen rijen met minimale waarde in een kolom met Where-voorwaarde

U kunt beginnen met het selecteren van de minimale bestelindex van producten die niet als volgt worden afgewezen:

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

Als je dat eenmaal hebt, kun je het samenvoegen met je originele tabel op voorwaarde dat productId en minOrderIndex overeenkomen:

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;

Mijn vraag gaat ervan uit dat er geen dubbele (productId, orderIndex) paren zijn. Zolang die er niet zijn, werkt dit prima. Hier is een SQL Fiddle voorbeeld.



  1. Hoe gebruik je alfanumerieke velden met BETWEEN-clausule in Mysql?

  2. Maandelijks actieve gebruikers (MAU) berekenen in MySQL

  3. hoe voeg ik unicode-tekens in mysql in met een insert-instructie?

  4. Waarom kan Java geen verbinding maken met MySQL 5.7 na de laatste JDK-update en hoe moet dit worden opgelost? (ssl.SSLHandshakeException:geen geschikt protocol)