提问人:justnewbie89 提问时间:5/19/2019 最后编辑:justnewbie89 更新时间:5/19/2019 访问量:506
在 10 分钟内查找连续交易
find consecutive transaction within 10 minutes
问:
我有这样的桌子
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
答:
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_DATE
datetime
STR_TO_DATE(xxx, '%m/%d/%Y %k:%i')
xxx
查找彼此相距 10 分钟内的订单的方法是在 上自行加入您的表,第二个订单上的时间在第一个订单的时间内和 10 分钟后:user_id
order_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
评论