我想找到使用SQL在类别中进行的新购买

时间:2018-02-06 06:32:50

标签: sql product customer

Sample data

我的数据如上所示。

我想找到第二个订单中订购不同类别的客户,而不是第一个订单。例如。在上图中,ALFKI在他的第一个订单中订购了类别1,7,8,即10643,在他的第二个订单中,即10692,他订购了类别2.我想要所有这些客户的列表。提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为你想要这些内容:

    select distinct tbl1.CustomerID from <table> tbl1
   where 
   (select count(*) from <table> tbl2 where tbl1.CustomerID = tbl2.CustomerID
   and 
   tbl1.OrderID <> tbl2.OrderID) > 1
   AND
   tbl1.CategoryID not in
    (select CategoryID from <table> tbl3
        where tbl3.OrderID < tbl1.OrderID
        and tbl1.CustomerID = tbl3.CustomerID)

这里的想法(假设我做对了,没有测试 - 我知道很危险)是你想要的:

  • 每个用户ID(仅一次,因此'不同')
  • 如果有多个订单(因此选择计数(*)> 1)
  • 其中类别不在先前的订单中(从中选择CategoryID)

它有两个相关的子查询,因此根据您的数据集大小,它可能无法快速运行 - 我可能误解了您的要求。但是,希望它足以让你开始。

如果您不知道如何使用相关子查询,请尝试查看此处:Wikipedia - Correlated Subquery