MySQL pour obtenir l'ID client et la date de la 20e transaction - Requête SQL
P粉604848588
P粉604848588 2024-02-17 13:35:57
0
2
437

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

répondre à tous(2)
P粉724737511

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;
P粉043295337

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal