Maison  >  Questions et réponses  >  le corps du texte

Récupérer l'enregistrement suivant/précédent d'une requête MySQL triée par plusieurs colonnes

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 为 97.

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粉006977956P粉006977956211 Il y a quelques jours287

répondre à tous(1)je répondrai

  • P粉763748806

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

    Suite au conseil de Paul Maxwell sur LEADLAG, 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.

    répondre
    0
  • Annulerrépondre