在mysql表中选择记录ID的第二个实例

时间:2014-11-12 13:48:46

标签: mysql

我需要能够找到每个客户下订单的时间,而我却无法想到如何做到这一点!

基本表格结构:

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多个订单。

1 个答案:

答案 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加入表格,而且表格的第二次加入时订单日期更大。

这可能会在计算时产生大量数据。

我有一种感觉,我已经错过了这个。