我在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 BY
和HAVING
是关键所在,但我不确定如何继续
答案 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