Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn N mục trước và M mục tiếp theo xung quanh id mục hiện tại

Khi bạn có yearcomm_count cho hàng đã chọn với id =7, bạn có thể thực hiện hai truy vấn đơn giản:

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 |
+----+------+------------+

Nếu bạn sử dụng MySQL 8.0, bạn có thể sử dụng Hàm LAG () và 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng sqlalchemy để truy vấn bằng cách sử dụng nhiều cột trong mệnh đề

  2. Cách chú thích trường tự động tăng thêm MYSQL với chú thích JPA

  3. Hiểu bộ ký tự và cụm từ trong MySQL

  4. `Mysqlcheck` có thể giúp tôi giải quyết các sự cố cơ sở dữ liệu mà không làm hỏng cơ sở dữ liệu của tôi không?

  5. Mysql - GIỚI HẠN theo Phần trăm?