Heim  >  Fragen und Antworten  >  Hauptteil

Rufen Sie den nächsten/vorherigen Datensatz aus der MySQL-Abfrage ab, sortiert nach mehreren Spalten

Ich führe die Abfrage folgendermaßen über meine MySQL-Datenbank (MariaDB 10.3) aus:

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

Ein Beispiel dieser Tabelle mit der angegebenen Reihenfolge sieht so aus:

id ... Priorität Ablaufdatum
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

Jetzt habe ich die ID eines bestimmten Datensatzes und versuche, die Datensätze, die vor/nach diesem Datensatz in den Abfrageergebnissen liegen, in der angegebenen Reihenfolge über SQL abzurufen. Nehmen wir an, ich habe einen Datensatz mit Datensatz-ID 6,我想分别返回 ID 为 97.

Sortieren nach einer einzelnen eindeutigen Spalte, was in einer einzelnen Abfrage leicht zu erreichen ist, aber ich bin mir nicht sicher, wie ich mit mehreren nicht eindeutigen Spalten umgehen soll. Kann mir jemand sagen, wie ich das erreichen kann?

P粉006977956P粉006977956211 Tage vor292

Antworte allen(1)Ich werde antworten

  • 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 相应。

    Antwort
    0
  • StornierenAntwort