我需要能够找到每个客户何时下第二个订单,但我不知道该怎么做!
基本表结构:
Order ID Customer ID Order Date
1 123 2014-09-12
2 456 2014-10-22
3 456 2014-11-01 <-- THIS IS CUST 456's 2ND ORDER
4 789 2014-11-01
5 123 2014-11-09 <-- THIS IS CUST 123's 2ND ORDER
6 225 2014-11-11
如何使用 mysql 从表中获取第二个订单?
真实的 table 有超过 20 万个订单和超过 7 万个客户,每个客户从 2010 年以来只下了一个订单到已经下了 20 多个订单。
最佳答案
如果您只想要第二个订单日期,则使用自连接来排除第一个订单,并使用 MIN 来获取剩余的最早订单:-
SELECT t1.CustomerId, MIN(t2.OrderDate)
FROM
( SELECT CustomerId, MIN(OrderDate) AS OrderDate
FROM some_table
GROUP BY CustomerId
) t1
INNER JOIN some_table t2
ON t1.CustomerId = t2.CustomerId
AND t1.OrderDate < t2.OrderDate
GROUP BY t1.CustomerId
如果您需要其他详细信息(例如订单 ID),那么您需要将其用作子查询并将其连接回主表。
编辑 - 可能可以简化如下:-
SELECT t1.CustomerId, MIN(t2.OrderDate)
FROM some_table t1
INNER JOIN some_table t2
ON t1.CustomerId = t2.CustomerId
AND t1.OrderDate < t2.OrderDate
GROUP BY t1.CustomerId
这是根据客户 ID 将表与自身连接起来,而且表的第二次连接上的订单日期更大。
这在进行计算时可能会生成大量数据。
不过我有一种感觉,我错过了一些东西。
关于mysql - 选择mysql表中记录ID的第二个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888532/