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

2 nejlepší záznamy MySQL na skupinu

Tvůj nápad je blízko. Myslím, že to bude fungovat lépe:

select u.*
from (select user_id, created_datetime, 
             $num := if(@user_id = user_id, @num + 1,
                        if(@user_id := id, 1, 1)
                       ) as row_number
      from logs cross join
           (select @user_id := 0, @num := 0) params
      order by user_id 
     ) u
where row_number <= 2 ;

Zde jsou změny:

  • Proměnné jsou nastaveny pouze v jednom výrazu. MySQL nezaručuje pořadí vyhodnocování výrazů, takže je to důležité.
  • Práce se provádí v dílčím dotazu, který je následně zpracován ve vnějším dotazu.
  • Poddotaz používá order by , nikoli group by .
  • Vnější dotaz používá where místo having (ve skutečnosti v MySQL having by fungovalo, ale where je vhodnější).



  1. Psql se nemohl připojit k serveru:Žádný takový soubor nebo adresář, chyba 5432?

  2. Nesprávný soubor klíče pro tabulku '/tmp/#sql_3c51_0.MYI' zkuste jej opravit

  3. Java/Mysql..SQLException:Tabulka musí mít alespoň 1 sloupec SQLState:42000 VendorError:1113

  4. Odstraňte duplikáty v seznamu objektů pomocí Pythonu