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

标签 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 从表中获取第二个订单?

真实的 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/

相关文章:

php - Google 图表在彼此旁边添加另一个图表

mysql - 具有未知字段的奇怪 SQL 请求

mysql - 在 MS Access 中将时间戳转换为人类可读

mysql - 数据库中未创建表

php - 在 pdo 中获取多个选择

MySQL 在连接表时选择 SUM

php - 奇怪的 jQuery .post 行为

php - sql语句问题。需要一次性查询3张表!

mysql - ON DUPLICATE 什么都不更新

mysql - 如何用联合查询替换子查询?