Heim > Fragen und Antworten > Hauptteil
Ich kann keine Anfrage stellen, um eine Liste der Kunden-IDs und das Datum ihres 20. Kaufs zu erhalten.
Ich habe eine Tabelle namens „transaktionen“ mit den Spaltennamen „customer_id“ und „purchase_date“ erhalten. Jede Zeile in der Tabelle entspricht einer Transaktion.
Kunden-ID | Kaufdatum |
---|---|
1 | 2020-11-19 |
2 | 2022-01-01 |
3 | 2021-12-05 |
3 | 09.12.2021 |
3 | 2021-12-16 |
Ich habe es versucht und bin davon ausgegangen, dass ich zählen muss, wie oft customer_id erwähnt wird, und wenn die Zahl 20 beträgt, die ID-Nummer zurückgeben muss.
SELECT customer_id, MAX(purchase_date) FROM transactions ( SELECT customer_id, FROM transactions GROUP BY customer_id HAVING COUNT (customer_id) =20 )
Wie kann ich dafür sorgen, dass eine Liste mit Kunden-IDs und dem Datum der 20. Transaktion zurückgegeben wird?
P粉7247375112024-02-18 12:59:53
我的解决方案:
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;
参见:DBFIDDLE
对于MySQL5.7,请参见: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
您需要选择属于customer_id的交易行,并按第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