【问题标题】:SQL join or subquery help on same table同一张表上的 SQL 连接或子查询帮助
【发布时间】:2018-03-14 17:59:36
【问题描述】:

我有一个难题,很可能由比我更聪明的人用 SQL 解决。

我有 1 个包含电子商务订单的表格。该表包含相当多的数据,但最重要的数据如下:

表名:ORDERS
第 1 列:客户名称
第 2 栏:订单日期
第 3 列:订单项

我要做的是确定客户是否仅在他们购买了特定商品的情况下才在初次购买后下订单。

我正在寻找向我显示以下内容的 SQL 结果:
客户名称
订单日期 1(第一个订单)
订单日期 2(第二个订单)
订单项 1(第一次购买,如果它 =“小部件 1”)
订单项 2(第二个订单)在第二个订单日期购买)

过去,我的做法是遍历.php中的第一组数据并查询每一行以查找Order Date 2 > Order Date 1的存在。我只是认为可能有更简单的方法使用 JOIN 或子查询执行此操作。

非常感谢!

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • 不太清楚您到底在寻找什么。客户的第一个订单必须包含“Widget 1”吗?您想显示“Widget 1”订单以及紧随其后的订单吗?或者任何以后的订单,这没关系?还是最后一个订单?或者您是否正在寻找恰好下了两个订单的客户,不多也不少?你看有很多你应该澄清的。然后:你卡在哪里了?我相信您至少可以在 SQL 中解决部分问题。要查找带有“Widget 1”的订单?应该问题不大吧那么您在查询方面做了多远,您在哪里卡住了?
  • 下面的答案非常适合让我到达我需要的地方。非常感谢!

标签: mysql sql join subquery


【解决方案1】:

假设特定项目在项目列中 你可以在同一张表上使用内连接

select a.`Customer Name` , a.`Order Date`, b.`Order Date`,  a.`Line Item`,  b.`Line Item`
from ORDERS a 
INNER JOIN ORDERS b ON a.`Customer Name` = b.`Customer Name` 
    AND a.`item` = b.`item`
    AND , a.`Order Date` > b.`Order Date`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多