首页  >  问答  >  正文

从按多列排序的 MySQL 查询中检索下一条/上一条记录

我正在通过我的 MySQL 数据库 (MariaDB 10.3) 运行查询,如下所示:

SELECT * FROM my_table ORDER BY priority DESC, expiration_date ASC, id ASC

具有给定顺序的该表的示例如下所示:

id ... 优先 expiration_date
3 ... 2 2022-07-01 12:00:00
7 ... 2 2022-07-03 12:00:00
6 ... 2 2022-07-04 12:00:00
9 ... 1 2022-07-02 12:00:00
4 ... 1 2022-07-05 12:00:00
11 ... 1 2022-07-05 12:00:00

现在我已经有了特定记录的 ID,并且我正在尝试通过 SQL 给定的顺序检索查询结果中位于所述记录之前/之后的记录。假设我有记录 ID 6,我想分别返回 ID 为 97 的记录。

通过单个唯一列进行排序,这在单个查询中很容易获得,但我不确定如何处理多个非唯一列。有人可以告诉我如何实现这一目标吗?

P粉006977956P粉006977956211 天前285

全部回复(1)我来回复

  • P粉763748806

    P粉7637488062024-03-23 10:39:29

    根据 Paul Maxwell 关于 LEADLAG 的提示,我能够编写如下工作查询:

    SELECT t.next_id 
    FROM (
        SELECT id, 
            LEAD(id, 1) OVER (ORDER BY priority DESC, expiration_date ASC, id ASC) AS next_id 
        FROM my_table
    ) t 
    WHERE t.id = ?

    检索以前的记录与 LAG 相应。

    回复
    0
  • 取消回复