Maison > Questions et réponses > le corps du texte
J'exécute la requête via ma base de données MySQL (MariaDB 10.3) comme ceci :
SELECT * FROM my_table ORDER BY priority DESC, expiration_date ASC, id ASC
Un exemple de ce tableau avec l'ordre donné ressemble à ceci :
id | ... | Priorité | date_d'expiration |
---|---|---|---|
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 |
Maintenant, j'ai l'ID d'un enregistrement spécifique et j'essaie de récupérer les enregistrements qui sont avant/après ledit enregistrement dans les résultats de la requête dans l'ordre donné via SQL. Disons que j'ai un enregistrement avec un identifiant d'enregistrement 6
,我想分别返回 ID 为 9
和 7
.
Trier par une seule colonne unique, ce qui est facile à obtenir en une seule requête, mais je ne sais pas comment gérer plusieurs colonnes non uniques. Quelqu'un peut-il me dire comment y parvenir ?
P粉7637488062024-03-23 10:39:29
Suite au conseil de Paul Maxwell sur LEAD
和 LAG
, j'ai pu rédiger une requête d'emploi comme celle-ci :
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 = ?
Récupérez les enregistrements précédents correspondant à LAG
.