SQL:如何使用依赖的两个条件?

时间:2017-09-21 11:41:17

标签: mysql sql

我的数据库中有唯一的客户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

4 个答案:

答案 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列表,指定产品的日期,第二个表包含销售给该客户的产品历史记录。

我们将分别致电LISTHIST,您可以通过以下方式获得所需的输出:

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;