在 10 分钟内查找连续交易

find consecutive transaction within 10 minutes

提问人:justnewbie89 提问时间:5/19/2019 最后编辑:justnewbie89 更新时间:5/19/2019 访问量:506

问:

我有这样的桌子

user_id order_id    create_time   payment_amount    product
101     10001      2018-04-02 5:26  48000           chair
102     10002      2018-04-02 7:44  25000           sofa
101     10003      2018-04-02 8:34  320000          ac
101     10004      2018-04-02 8:37  180000          water
103     10005      2018-04-02 9:32  21000           chair
102     10006      2018-04-02 9:33  200000          game console
103     10007      2018-04-02 9:36  11000           chair
107     10008      2018-04-02 11:05 10000           sofa
105     10009      2018-04-02 11:06 49000           ac
101     10010      2018-04-02 12:05 1200000         cc
105     10011      2018-04-02 12:12 98000           ac
103     10012      2018-04-02 13:11 85000           insurance
106     10013      2018-04-02 13:11 240000          cable tv
108     10014      2018-04-02 13:15 800000          financing
106     10015      2018-04-02 13:18 210000          phone

我的目标是找到哪个用户连续交易不到 10 分钟。 我正在使用 mysql

MySQL数据库

评论

0赞 Hamed Ghasempour 5/19/2019
您的create_time字段 datetime 类型?
0赞 justnewbie89 5/19/2019
是@HamedGhasempour create_time列具有 datetime 类型
1赞 Nick 5/19/2019
这不是有效的MySQL日期时间...

答:

0赞 Hamed Ghasempour 5/19/2019 #1

使用以下查询:

SELECT user_id FROM `table_name` WHERE create_time < DATE_SUB(NOW(), INTERVAL 10 MINUTE) GROUP BY user_id HAVING count(user_id) > 1
0赞 Nick 5/19/2019 #2

根据表格中日期的格式,您需要转换它们,以便在查询中使用它们。如果列实际上是一个类型,而这只是输出该格式的显示代码,则只需在此查询中替换为 。STR_TO_DATEdatetimeSTR_TO_DATE(xxx, '%m/%d/%Y %k:%i')xxx

查找彼此相距 10 分钟内的订单的方法是在 上自行加入您的表,第二个订单上的时间在第一个订单的时间内和 10 分钟后:user_idorder_id

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 上的演示