我需要能够找到每个客户下订单的时间,而我却无法想到如何做到这一点!
基本表格结构:
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从表中获取第二个订单?
真实的桌子有超过200K的订单和超过70,000的客户,每个客户从订购一个订单到自2010年以来已经订购了20多个订单。
答案 0 :(得分:3)
如果您只想要第二个订单日期,那么自行加入以排除第一个订单,并使用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加入表格,而且表格的第二次加入时订单日期更大。
这可能会在计算时产生大量数据。
我有一种感觉,我已经错过了这个。