sql >> データベース >  >> RDS >> Mysql

MySQLは、15分のウィンドウで過剰なトランザクションを見つけるためにSQLを作成する方法を教えてください。

    日付/時刻を秒に変換し、秒を計算して、15分のクロック間隔内の値を取得できます。

    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;
    

    上記はto_seconds()を使用しています 。 MySQLの以前のバージョンでは、unix_timestamp()を使用できます。 。

    15分の間隔を取得することはより困難です。 表現できます クエリは次のとおりです:

    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;
    

    このクエリのパフォーマンスには問題がある可能性があります。 trans(card_id, merchant_id, tran_dt)のインデックス 大いに役立つはずです。



    1. GROUP_CONCAT()またはINNERJOINの結果を制限する

    2. OracleのPLSQLレコードとは

    3. Oracleページネーション戦略

    4. SQL Server 2008 がロング トランザクションの INSERT で SELECT をブロックするのはなぜですか?