Rumah > Soal Jawab > teks badan
Saya menjalankan pertanyaan melalui pangkalan data MySQL saya (MariaDB 10.3) seperti ini:
SELECT * FROM my_table ORDER BY priority DESC, expiration_date ASC, id ASC
Contoh jadual ini dengan susunan yang diberikan kelihatan seperti ini:
id | ... | Keutamaan | tarikh_luput |
---|---|---|---|
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 |
Sekarang saya mempunyai ID rekod tertentu dan saya cuba mendapatkan semula rekod yang sebelum/selepas rekod tersebut dalam keputusan pertanyaan dalam susunan yang diberikan melalui SQL. Katakan saya mempunyai rekod dengan ID rekod 6
,我想分别返回 ID 为 9
和 7
.
Isih mengikut satu lajur unik, yang mudah diperolehi dalam satu pertanyaan, tetapi saya tidak pasti cara mengendalikan berbilang lajur bukan unik. Bolehkah seseorang memberitahu saya bagaimana untuk mencapai ini?
P粉7637488062024-03-23 10:39:29
Mengikuti petua Paul Maxwell tentang LEAD
和 LAG
, saya dapat menulis pertanyaan kerja seperti ini:
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 = ?
Dapatkan rekod sebelumnya yang sepadan dengan LAG
.