Rufen Sie den nächsten/vorherigen Datensatz aus der MySQL-Abfrage ab, sortiert nach mehreren Spalten
P粉006977956
P粉006977956 2024-03-22 11:08:54
0
1
312

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粉006977956
P粉006977956

Antworte allen(1)
P粉763748806

根据 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 相应。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage