suchen

Heim  >  Fragen und Antworten  >  Hauptteil

MySQL zum Abrufen der Kunden-ID und des 20. Transaktionsdatums – SQL-Abfrage

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粉604848588P粉604848588280 Tage vor442

Antworte allen(2)Ich werde antworten

  • P粉724737511

    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;

    Antwort
    0
  • P粉043295337

    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

    Antwort
    0
  • StornierenAntwort