recherche

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

MySQL pour obtenir l'ID client et la date de la 20e transaction - Requête SQL

Je ne parviens pas à effectuer une requête pour obtenir une liste des identifiants clients et la date de leur 20ème achat.

J'ai une table appelée transactions avec les noms de colonnes customer_id et Purchase_date. Chaque ligne du tableau équivaut à une transaction.

id_client Date d'achat
1 2020-11-19
2 2022-01-01
3 2021-12-05
3 2021-12-09
3 2021-12-16

J'ai essayé cela et j'ai supposé que je devais compter le nombre de fois que customer_id est mentionné et si le nombre est égal à 20, renvoyer le numéro d'identification.

SELECT customer_id, MAX(purchase_date)
FROM transactions
(
     SELECT customer_id,
     FROM transactions
     GROUP BY customer_id
     HAVING COUNT (customer_id) =20
)

Comment puis-je lui faire renvoyer une liste de customer_ids et la date de la 20ème transaction ?

P粉604848588P粉604848588284 Il y a quelques jours446

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

  • P粉724737511

    P粉7247375112024-02-18 12:59:53

    Ma solution :

    select *
    from transactions t
    inner join (
       select 
          customer_id,
          purchase_date,
          row_number() over (partition by customer_id order by purchase_date) R
       from transactions) x on x.purchase_date=t.purchase_date
                           and x.customer_id=t.customer_id
    where x.R=20;

    Voir aussi : DBFIDDLE

    Pour MySQL5.7, voir : DBFIDDLE

    set @r:=1;
    select *
    from transactions t
    inner join (
       select 
          customer_id,
          purchase_date,
          @r:=@r+1 R
       from transactions) x on x.purchase_date=t.purchase_date
                           and x.customer_id=t.customer_id
    where x.R=20;

    répondre
    0
  • P粉043295337

    P粉0432953372024-02-18 11:45:56

    Vous devez sélectionner la ligne de transaction appartenant à customer_id et filtrer les résultats par ligne 20

    SELECT * FROM (
        SELECT customer_id, purchase_date, ROW_NUMBER() OVER(
            PARTITION BY customer_id
            ORDER BY purchase_date DESC
        ) AS nth
        FROM transactions
    ) as t WHERE nth = 20

    répondre
    0
  • Annulerrépondre