sql >> データベース >  >> RDS >> Mysql

MySQL:特定の行の前後に5行を選択します

    union allを使用する レコードを制限するサブクエリはそれを行う必要があります:

    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
    

    サンプルSQLフィドル

    <ストライク>

    編集:より良い方法は、スコアに従って行に番号を付けてから、ID5の行から番号-2および+2の行を選択することだと思います:

    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;    
    

    サンプルSQLフィドル



    1. ストアドプロシージャのパラメータリストで式(関数呼び出しなど)の結果を使用しますか?

    2. SQL Developerで生の変数長が長すぎるエラーを回避するにはどうすればよいですか?

    3. mysqlblobに保存されている画像を表示する

    4. NodeJSPostgresエラーgetaddrinfoENOTFOUND