代码之家  ›  专栏  ›  技术社区  ›  Michi

选择在某个时间段之前和之后存在的值

  •  0
  • Michi  · 技术社区  · 6 年前

    我有下面这张简单的表格,你可以在里面找到。 SQL Fiddle here :

    CREATE TABLE Orders (
        Customer TEXT,
        Order_Date DATE
    
    );
    
    INSERT INTO Orders
    (Customer, Order_Date)
    VALUES 
    ("Customer A", "2017-05-23"),
    ("Customer B", "2018-09-10"),
    ("Customer B", "2018-12-14"),
    ("Customer A", "2019-01-03"),
    ("Customer A", "2019-02-15"),
    ("Customer C", "2017-09-04"),
    ("Customer B", "2019-01-09"),
    ("Customer A", "2019-02-16"),
    ("Customer C", "2019-02-12"),
    ("Customer B", "2018-01-03");
    

    正如您所看到的,表显示了来自不同客户的订单日期。
    我使用以下SQL获取2019年2月下订单的所有客户:

    SELECT Customer
    FROM ORDERS
    WHERE Order_Date >= "2019-02-01 00:00:00"
    AND Order_Date < "2019-03-01 00:00:00"
    

    到目前为止这一切都很好。


    但是,现在我想实现的是,只有客户列出了

    a)下订单 二月

    WHERE order in >= "2019-02-01 00:00:00" AND < "2018-03-01 00:00:00"
    


    b) 没有 12个月前

    WHERE no order < "2019-02-01 00:00:00" AND >= "2018-01-02 00:00:00"
    


    c)下订单 12个月前

    WHERE order in < "2018-01-02 00:00:00"
    


    要实现这一点,我需要在查询中进行哪些更改?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    这有点复杂,但你可以使用 group by having :

    SELECT o.Customer
    FROM ORDERS o
    GROUP BY o.Customer
    HAVING SUM( o.Order_Date >= '2019-02-01' AND o.Order_Date < '2019-03-01' ) > 0 AND
           SUM( o.Order_Date >= '2018-01-02' AND o.Order_Date < '2019-02-01' ) = 0 AND
           SUM( o.Order_Date < '2018-01-02' ) > 0 ;