[英]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.