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

MySQL:wybierz 5 wierszy przed i po określonym wierszu

Używanie union all i podzapytania ograniczające rekordy powinny to zrobić:

select * from  users where id = 5
union all (
  select * from users 
  where score <  (select score from users where id = 5) 
  order by score desc limit 2
) 
union all (
  select * from users 
  where score > (select score from users where id = 5) 
  order by score asc limit 2
) 
order by score

Przykładowe skrzypce SQL

Edycja:myślę, że lepszą metodą jest ponumerowanie wierszy według wyniku, a następnie wybranie wierszy z numerami -2 i +2 z wierszy o id 5:

select id, name, score 
from (select 
      t.*, @rownum1 := @rownum1 + 1 as rank
      from users t, (select @rownum1 := 0) r
      order by score
     ) a,
     (select rank from (
        select t.*, 
        @rownum := @rownum + 1 as rank
        from users t, (select @rownum := 0) r
        order by score
     ) t
      where id = 5
   ) b
where b.rank between a.rank -2 and a.rank+2
order by score;    

Przykładowe skrzypce SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql dołączyć do dwóch stołów

  2. WYBIERZ * GDZIE NIE ISTNIEJE

  3. MySQL z Entity Framework — co robię źle?

  4. Zapytanie MySQL :Dopasuj wartość oddzieloną przecinkami z kolumną zawierającą ciąg oddzielony przecinkami

  5. Class.forName(com.mysql.jdbc.Driver).newInstance()