我的数据库中有唯一的客户ID。
我知道在指定产品之前他们购买了哪些产品。我有一个列表,当指定的ID购买了香蕉我想在此之前搜索所有产品和日期。
示例我有数据:
CustomerID Product Date
123 banana 2015-03-15
111 banana 2014-07-09
321 banana 2013-04-03
如何编写SQL命令搜索客户在该日期之前购买的所有产品? 实施例
CustomerID Product Date
123 Apple 2014-05-07
123 Kiwi 2014-05-06
123 Pen 2012-12-12
111 Pen 2014-07-07
111 Milk 2010-01-30
321 Milk 2012-02-12
答案 0 :(得分:2)
这对你有用。表名是设计的,因此您需要替换它。
SELECT CustomerID, Product, Date
FROM ProductTable p1
WHERE Date < (
SELECT MAX(Date)
FROM ProductTable p2
WHERE p2.CustomerID = p1.CustomerID AND p2.Product = 'banana'
)
ORDER BY CustomerID, Date;
答案 1 :(得分:2)
@Peter Abolins的回答是正确的,但是当客户从未购买过香蕉时却没有处理。
要处理这种情况,请求将变为:
SELECT CustomerID, Product, Date
FROM ProductTable p1
WHERE Date < (
SELECT IFNULL (
(SELECT MAX(Date)
FROM ProductTable p2
WHERE p2.CustomerID = p1.CustomerID AND p2.Product = 'banana'),
'9999-12-31'
)
)
ORDER BY CustomerID, Date;
PS:我知道这应该是评论,但我还不能对这个帐户发表评论。
答案 2 :(得分:0)
我不确定这是否是您想要的,但请试一试并查看结果:
SELECT * FROM tableA AS a
JOIN tableA AS b
ON a.CustomerID = b.CustomerID AND a.Date > b.Date
ORDER BY a.CustomerID, a.Product, a.Date
答案 3 :(得分:0)
您有两个表,第一个表包含客户ID列表,指定产品的日期,第二个表包含销售给该客户的产品历史记录。
我们将分别致电LIST
和HIST
,您可以通过以下方式获得所需的输出:
SELECT p1.CustomerID, p2.Product, p2.Date
FROM LIST p1
left join HIST p2 on p2.CustomerID = p1.CustomerID AND P1.Date > P2.Date
ORDER BY p1.CustomerID, p2.Date;