我想找出最晚和第二晚之间的日差 order_id
对于每个用户。
预期输出为:
user_id | order_diff
1 | 1
3 | 7
8 | 1
``` `order_diff` 表示两个不同的 `order_id` . 如果没有两个不同的 `order_id` (与用户id 9的情况一样),不返回结果。
在这种情况下 `order_diff` 为了
user_id `1` 是1,因为他2之间的日差不同 `order_id` 是1。但是,没有 `order_diff` 为了 `user_id` 因为他没有2个不同的“订单号”。
这是数据集:
user_id order_id order_time
1 208965785 2016-12-15 17:14:13
1 201765785 2016-12-14 17:19:05
1 203932785 2016-12-13 20:41:30
1 209612785 2016-12-14 20:14:32
1 208112785 2016-12-14 20:27:08
1 205525785 2016-12-14 17:01:26
1 208812785 2016-12-14 20:18:23
1 206432785 2016-12-11 20:32:20
1 206698785 2016-12-14 10:50:15
2 209524795 2016-11-26 18:06:21
3 206529925 2016-10-01 10:43:57
3 203729925 2016-10-08 10:43:11
4 204876145 2016-09-24 10:23:49
5 203363157 2016-07-13 23:56:43
6 207784875 2017-01-04 12:21:21
7 206437177 2016-06-25 02:40:33
8 202819645 2016-09-09 11:47:27
8 202819645 2016-09-09 11:47:27
8 202819646 2016-09-08 11:47:27
9 205127187 2016-06-05 22:21:18
9 205127187 2016-06-05 22:21:18
11 207874877 2016-06-17 16:49:44
12 204927595 2016-11-28 23:05:40
这是我当前使用的代码:
SELECT e1.user_id,datediff(e1.order_time,e2.time), e1.order_id FROM
sales e1
JOIN
sales e2
ON
e1.user_id=e2.user_id
AND
e1.order_id = (SELECT distinct order_id FROM sales temp1 WHERE temp1.order_id =e1.order_id ORDER BY order_time DESC LIMIT 1)
AND
e2.order_id = (SELECT distinct order_id FROM sales temp2 WHERE temp2.order_id=e2.order_id ORDER BY order_time DESC LIMIT 1 OFFSET 1)
我的输出不会产生所需的输出,它还忽略了 `order_ids` 都是一样的。
编辑:我还希望查询扩展到更大的数据集,其中第二个最新的 `order_time` 可能不是 `min(order_time)`
3条答案
按热度按时间7xzttuei1#
以下是解决方案:
下面是一个测试它的链接。
tcomlyy62#
以下方法可行:
架构(mysql v5.7)
查询#1
db fiddle视图
细节:
我们确定最大值
order_time
为了一个user_id
在子选择查询(派生表)中。我们可以把它化名为latest_order_time
.我们
Join
此结果设置为orders
table。这将帮助我们只考虑最大值为的行order_time
为了一个user_id
.现在,我们使用相关子查询来确定最大
order_time
相同用户的值,超出order_id
值。我们可以把它化名为second_latest_order_time
.最后,再次将其用作派生表,并删除
second_latest_order_time
是null
,并计算datediff()
剩下的。决赛
Group By
是必需的,因为您的数据有多个条目s1ag04yj3#
根据你的小提琴: