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

現在のアイテムIDの前後のN個の前のアイテムとM個の次のアイテムを選択します

    yearを取得したら およびcomm_count id =7で選択した行の値の場合、2つの簡単なクエリを実行できます。

    SELECT * FROM photo 
    WHERE year > 2017 AND (comm_count = 1 AND year <= 2022 OR comm_count < 1) 
    ORDER BY comm_count DESC, year DESC LIMIT 3 OFFSET 1
    +----+------+------------+
    | id | year | comm_count |
    +----+------+------------+
    |  6 | 2021 |          1 |
    |  4 | 2019 |          1 |
    +----+------+------------+
    
    SELECT * FROM photo 
    WHERE year > 2017 AND (comm_count = 1 AND year >= 2022 OR comm_count > 1) 
    ORDER BY comm_count ASC, year ASC LIMIT 3 OFFSET 1;
    +----+------+------------+
    | id | year | comm_count |
    +----+------+------------+
    |  3 | 2018 |          7 |
    |  5 | 2020 |          9 |
    +----+------+------------+
    

    MySQL 8.0を使用する場合は、 LAG()およびLEAD()関数

    SELECT id, year, 
      LAG(id, 1) OVER w AS next,
      LAG(id, 2) OVER w AS next_next,
      LEAD(id, 1) OVER w AS prev,
      LEAD(id, 2) OVER w AS prev_prev
    FROM photo 
    WHERE year > 2017
    WINDOW w AS (ORDER BY comm_count DESC, year DESC)
    
    +----+------+------+-----------+------+-----------+
    | id | year | next | next_next | prev | prev_prev |
    +----+------+------+-----------+------+-----------+
    |  5 | 2020 | NULL |      NULL |    3 |         7 |
    |  3 | 2018 |    5 |      NULL |    7 |         6 |
    |  7 | 2022 |    3 |         5 |    6 |         4 |
    |  6 | 2021 |    7 |         3 |    4 |      NULL |
    |  4 | 2019 |    6 |         7 | NULL |      NULL |
    +----+------+------+-----------+------+-----------+
    



    1. SELECTステートメントの2行間のMySQLの違い

    2. MySQLテーブルがUTF-8であり、storageEngine InnoDBがあるかどうかを確認するにはどうすればよいですか?

    3. MySQLを保護する方法:パート1

    4. Oracleでパスワードを暗号化する方法は?