找到在一段时间内以及之前而不是之前购买过某物的客户

时间:2017-08-30 17:53:51

标签: sql postgresql

我有以下两个表:

  1. ordersorderid | orderdate | userid | ...
  2. usersuserid | ...
  3. 我加入他们两个:

    SELECT * FROM orders
    JOIN users ON orders.userid = users.id
    

    获取包含用户提交的所有订单的表格。

    现在我需要让所有在2016-11-01之间购买东西的顾客 和2017-31-01:

    1. 2016-11-01之前至少一次以及2016-11-01和2017-02-01之间
    2. 2016-11-01之前没什么,但是第一次买了东西 2016-11-01和2017-02-01。
    3. 非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

他们可能会给你负面投票,因为你没有包含测试,你试过的查询。而且看起来你已经完全委派了这份工作。

无论如何,这是一个未经测试的查询,日期通常与该地区有关。把它看作是你如何做的想法(可能会有更清洁的方法):

SELECT * FROM users WHERE
    EXISTS (SELECT * FROM orders 
        WHERE orderdate >= CONVERT(datetime, '2016-11-01' , 101) 
        AND orderdate <= CONVERT(datetime, '2017-31-01' , 101)
        AND userid = users.id)
    AND
    NOT EXISTS (SELECT * FROM orders 
        WHERE orderdate <= CONVERT(datetime, '2017-31-01' , 101)
        AND userid = users.id)