sql >> Database teknologi >  >> RDS >> Mysql

MySQL hvordan skriver man SQL for at finde overdrevne transaktioner i 15 minutters vinduer?

Du kan konvertere datoen/klokkeslættet til sekunder og regne med sekunderne for at få værdien inden for et urinterval på 15 minutter:

select card_id, min(date(tran_dt)) as first_charge_time, merchant_id, count(*)
from tran
group by card_id, floor(to_seconds(tran_dt) / (60 * 15)), merchant_id
having count(*) >= 3;

Ovenstående bruger to_seconds() . I tidligere versioner af MySQL kan du bruge unix_timestamp() .

At få et 15 minutters interval er mere udfordrende. Du kan udtrykke forespørgslen som:

select t1.*, count(*) as numTransactions
from tran t1 join
     tran t2
     on t1.merchant_id = t2.merchanti_d and
        t1.card_id = t2.card_id and
        t2.tran_dt >= t1.tran_dt and
        t2.tran_dt < t1.tran_dt + interval 15 minute 
group by t1.id
having numTransactions >= 3;

Ydelse af denne forespørgsel kan være problematisk. Et indeks på trans(card_id, merchant_id, tran_dt) burde hjælpe meget.



  1. Fejlfinding Ingen sådan fil eller mappe, når du kører `php app/console doctrine:schema:create`

  2. MySQL-udløser, hvis betingelsen eksisterer

  3. Strategi til at kortlægge flere filer i en enkelt tabel til et enkelt felt i en anden tabel

  4. Sådan ændres webporten i EBS 12.2