繁体   English   中英

在特定商品订购日期之前订购的商品

[英]Items ordered before the date of order of a particular item

这是我的桌子

|Customer|Order Nr.| Items | date of order |
|    1   |    1    | Item1 | date 1        | 
|    1   |    1    | Item2 | date 1        |
|    1   |    2    | Item1 | date 2        |
|    1   |    2    | Item3 | date 2        |
|    1   |    3    | Item6 | date 9        | --> Item 6,   date 9 is reference date
|    1   |    6    | Item5 | date 14       |
|    1   |    7    | Item6 | date 18       | --> Item 6 again, date 18 is not relevant
|    2   |    1    | Item3 | date 4        |
|    2   |    1    | Item5 | date 4        |
|    2   |    2    | Item9 | date 3        |
|    2   |    2    | Item6 | date 3        | --> date 3 is reference date
|    2   |    3    | Item6 | date 4        | --> Item 6 again, date 4 is not relevant

我需要在参考日期之前获取客户的所有订单和物品。 Referenfe日期是在日期Item6奉命首次通过这个客户。 该表中的客户列表是订购Item6

该表必须如下所示:

|Customer| Items |
|    1   | Item1 |
|    1   | Item2 |
|    1   | Item3 |
|    2   | Item3 |
|    2   | Item5 |
|    2   | Item9 |

重新安装表不应包含Item6信息!

任何建议将不胜感激!

对于客户X ,此查询查找参考日期:

SELECT min(DateOfOrder)
FROM MyTable
WHERE Customer = X
  AND Items = 'Item6';

现在,您可以在相关子查询中使用它来过滤行:

SELECT Customer,
       Items
FROM MyTable AS T1
WHERE DateOfOrder < (SELECT min(T2.DateOfOrder)
                     FROM MyTable AS T2
                     WHERE T2.Customer = T1.Customer
                       AND T2.Items = 'Item6');

这将返回每个客户购买商品6的最低日期

select  Customer, min(DateOfOrder)
from    yourTable
where   Items = 'Item6'
group by Customer

然后可以将其与原始表连接

select  Customer, Items
from    yourTable t1
join    (
            select  Customer, min(DateOfOrder) minDate
            from    yourTable
            where   Items = 'Item6'
            group by Customer
        ) t2
on      t1.Customer = t2.Customer
where   t1.DateOfOrder < t2.minDate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM