cari

Rumah  >  Soal Jawab  >  teks badan

MySQL untuk mendapatkan ID pelanggan dan tarikh transaksi ke-20 - pertanyaan SQL

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粉604848588P粉604848588280 hari yang lalu439

membalas semua(2)saya akan balas

  • P粉724737511

    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;

    balas
    0
  • P粉043295337

    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

    balas
    0
  • Batalbalas