SQL选择(1月和3月)的日期,而不是2月

时间:2018-03-07 15:20:50

标签: sql sql-server

我在SQL中有一个名为 Balance

的表


    +----+-----------+-------+------+
    | id | accountId | Date  | Type |
    +----+-----------+-------+------+
    | PK | FK        | Date  | Int  |
    +----+-----------+-------+------+

我需要找到在1月和3月有余额条目的 accountId ,但是在2月份不是。 仅在2018年,Type应为2。

我如何编写我的sql select语句?

由于

编辑: 到目前为止我做了什么: 在Jan或March中选择 的行对我来说不是问题。

SELECT AccountId, Date FROM Balance
WHERE Month(Date) in (1,3) AND YEAR(Date) = 2018 AND Type =2
ORDER BY AccountId, Date

但是如果一个AccountId只有一个条目,比如一月份,那么这将包括在内。这不是我想要的。 只有当一个帐户在1月和3月都有条目,而不是在2月才有意思。

我怀疑Group BYHAVING是关键所在,但我不确定如何继续

1 个答案:

答案 0 :(得分:3)

我会使用聚合来做到这一点:

select b.accountid
from balance b
where date >= '2018-01-01' and date < '2019-01-01'
group by b.accountid
having sum(case when month(date) = 1 then 1 else 0 end) > 0 and  -- has january
       sum(case when month(date) = 3 then 1 else 0 end) > 0 and  -- has march
       sum(case when month(date) = 2 then 1 else 0 end) = 0  -- does not have february