获取在一行中有订单但在另一行中没有订单的用户

时间:2015-05-04 07:40:39

标签: sql sql-server sql-server-2012

我有一张表,如下图所示。我需要让所有在二月份订购但三月份没有订单的用户。

我有以下查询,但我不知道如何完成它。

SELECT *
FROM My_Table
WHERE Order > 0
    AND Date BETWEEN '20150201' AND '20150228' 

User       Date         order
-----------------------------
Aleks     2015-02-01    100
Tatya     2015-03-10    200
Sabine    2015-02-08    300
Aleks     2015-03-27    150

2 个答案:

答案 0 :(得分:3)

您可以将not exists与相关子查询一起使用:

select * 
from [My_Table] t
where [Order] > 0
  and ([Date] between '20150201' and '20150228')
  and not exists ( select *
                   from [My_Table]
                   where [Order] > 0
                     and [User] = t.[User]
                     and [Date] between '20150301' and '20150331')

答案 1 :(得分:0)

假设您只需要每个用户一次:

SELECT User
FROM My_Table
WHERE
  Order > 0
  AND Date BETWEEN '20150201' AND '20150331' 
GROUP BY User
HAVING max(date) < '20150301'