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

10分以内に連続したトランザクションを見つける

    表の日付の形式に基づいて、STR_TO_DATEを使用して日付を変換する必要があります クエリでそれらを使用します。あなたのコラムがの場合 実際にはdatetime タイプし、それはそのフォーマットを出力する表示コードです。STR_TO_DATE(xxx, '%m/%d/%Y %k:%i')を置き換えるだけです。 このクエリではxxx

    互いに10分以内に注文を見つける方法は、user_idでテーブルに自己参加することです。 、order_id 2番目の注文の時間は1番目の注文の時間内で10分後です:

    SELECT t1.user_id, t1.create_time AS order1_time, t2.create_time AS order2_time
    FROM transactions t1
    JOIN transactions t2 ON t2.user_id = t1.user_id
                        AND t2.order_id != t1.order_id
                        AND STR_TO_DATE(t2.create_time, '%m/%d/%Y %k:%i') BETWEEN
                               STR_TO_DATE(t1.create_time, '%m/%d/%Y %k:%i') 
                           AND STR_TO_DATE(t1.create_time, '%m/%d/%Y %k:%i') + INTERVAL 10 MINUTE
    

    出力:

    user_id     order1_time     order2_time
    101         4/2/2018 8:34   4/2/2018 8:37
    103         4/2/2018 9:32   4/2/2018 9:36
    106         4/2/2018 13:11  4/2/2018 13:18
    

    dbfiddleのデモ



    1. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:接続が閉じられた後の操作は許可されていません

    2. ツリー構造用に最適化されたSQL

    3. Oracle、Postgres、SQLServerの文字列連結演算子

    4. SELECTクエリは各グループから1行を返します