sql >> Databáze >  >> RDS >> Mysql

MySQL - Kontrolujte, který řádek je vrácen skupinou

Říká se tomu výběr skupinového maxima sloupce. Zde je několik různých přístupů pro mysql.

Zde je návod, jak bych to udělal:

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

To bude relativně efektivní, ačkoli mysql vytvoří dočasnou tabulku v paměti pro poddotaz. Předpokládám, že pro tuto tabulku již máte index na (id, version_id).

Nedostatkem SQL je, že pro tento typ problému musíte víceméně použít poddotaz ( poloviční spojení jsou dalším příkladem).

Poddotazy nejsou v mysql dobře optimalizovány, ale nekorelované poddotazy nejsou tak špatné, pokud nejsou tak obrovské, že se budou zapisovat na disk, nikoli do paměti. Vzhledem k tomu, že v tomto dotazu jsou pouze dva int, poddotaz mohl mít miliony řádků dlouho předtím, než k tomu došlo, ale poddotaz select * ve vašem prvním dotazu by mohl trpět tímto problémem mnohem dříve.



  1. Java Stored Procedure vs PL/SQL Stored Procedure

  2. Psaní volitelných parametrů v rámci uložených procedur v MySQL?

  3. K čemu slouží system table master..spt_values ​​a jaký význam mají jeho hodnoty?

  4. Vygenerujte celočíselnou sekvenci v MySQL