Rumah > Soal Jawab > teks badan
Saya tidak boleh membuat pertanyaan untuk mendapatkan senarai ID pelanggan dan tarikh pembelian ke-20 mereka.
Saya mendapat jadual yang dipanggil transaksi dengan nama lajur customer_id dan purchase_date. Setiap baris dalam jadual sama dengan transaksi.
id_pelanggan | Tarikh pembelian |
---|---|
1 | 2020-11-19 |
2 | 2022-01-01 |
3 | 2021-12-05 |
3 | 2021-12-09 |
3 | 2021-12-16 |
Saya mencuba ini dan menganggap bahawa saya perlu mengira bilangan kali pelanggan_id disebut dan jika kiraan bersamaan dengan 20, kembalikan nombor id.
SELECT customer_id, MAX(purchase_date) FROM transactions ( SELECT customer_id, FROM transactions GROUP BY customer_id HAVING COUNT (customer_id) =20 )
Bagaimanakah saya boleh mengembalikan senarai id_pelanggan dan tarikh transaksi ke-20?
P粉7247375112024-02-18 12:59:53
Penyelesaian saya:
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;
Lihat juga: DBFIDDLE
Untuk MySQL5.7, lihat: 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
Anda perlu memilih baris transaksi kepunyaan customer_id dan menapis keputusan mengikut baris 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