Maison > Questions et réponses > le corps du texte
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粉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;
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