Mysql
 sql >> Baza danych >  >> RDS >> Mysql

2 najlepsze rekordy MySQL na grupę

Twój pomysł jest bliski. Myślę, że to zadziała lepiej:

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 ;

Oto zmiany:

  • Zmienne są ustawione tylko w jednym wyrażeniu. MySQL nie gwarantuje kolejności oceny wyrażeń, więc jest to ważne.
  • Praca jest wykonywana w podzapytaniu, które jest następnie przetwarzane w zapytaniu zewnętrznym.
  • Podzapytanie wykorzystuje order by , a nie group by .
  • Zewnętrzne zapytanie używa where zamiast having (właściwie w MySQL having zadziała, ale where jest bardziej odpowiednie).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodanie klucza obcego do istniejącej tabeli daje błąd 1050 tabela już istnieje

  2. Jak inkrementować w SQL za pomocą wyzwalacza?

  3. Jak liczyć wartości NULL w MySQL?

  4. MySQL:wybierz pierwszy element listy oddzielonej przecinkami

  5. Błąd Rubiego mysql2