sql >> Database teknologi >  >> RDS >> Mysql

MySQL - Styr hvilken række der returneres af en gruppe af

Det kaldes at vælge det gruppemæssige maksimum for en kolonne. Her er flere forskellige tilgange til mysql.

Sådan ville jeg gøre det:

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

Dette vil være relativt effektivt, selvom mysql vil oprette en midlertidig tabel i hukommelsen til underforespørgslen. Jeg antager, at du allerede har et indeks på (id, version_id) for denne tabel.

Det er en mangel i SQL, at du mere eller mindre skal bruge en underforespørgsel til denne type problemer ( semi-joins er et andet eksempel).

Underforespørgsler er ikke godt optimeret i mysql, men ukorrelerede underforespørgsler er ikke så dårlige, så længe de ikke er så enorme, at de bliver skrevet til disk i stedet for hukommelse. I betragtning af, at i denne forespørgsel kun har to ints, kunne underforespørgslen være millioner af rækker længe før det skete, men select *-underforespørgslen i din første forespørgsel kunne lide af dette problem meget hurtigere.



  1. Forbedre ydeevnen af ​​UDF'er med NULL ON NULL INPUT

  2. Sådan eksporteres data fra SQL Server 2005 til MySQL

  3. Forbindelsen mislykkedes:Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:JA) fra php-funktionen

  4. Konverter SQLite til JSON