sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Styr vilken rad som returneras av en grupp av

Det kallas att välja gruppmässigt maximum för en kolumn. Här finns flera olika metoder för mysql.

Så här skulle jag göra:

SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id

Detta kommer att vara relativt effektivt, även om mysql kommer att skapa en tillfällig tabell i minnet för underfrågan. Jag antar att du redan har ett index på (id, version_id) för den här tabellen.

Det är en brist i SQL att du mer eller mindre måste använda en underfråga för den här typen av problem ( semi-joins är ett annat exempel).

Undersökningar är inte väl optimerade i mysql men okorrelerade underfrågor är inte så illa så länge de inte är så enorma att de skrivs till disk snarare än minne. Med tanke på att den här frågan bara har två ints kan underfrågan vara miljontals rader långt innan det hände, men underfrågan select * i din första fråga kan drabbas av detta problem mycket tidigare.



  1. Hur olika är PostgreSQL från MySQL?

  2. PostgreSQL vs. Oracle:skillnad i kostnader, användarvänlighet och funktionalitet

  3. Hitta ett värde var som helst i en databas

  4. Enkel Slony-I replikeringsinställning.