我有一个记录的多个版本的数据集。在下面的结构中:
ID Version Date ActionedBy
1 1 20/08/2018 James
1 2 20/08/2018 Samuel
2 1 20/08/2018 Tom
3 1 20/08/2018 Tom
3 2 20/08/2018 Tom
3 1 20/08/2018 Dave
4 1 20/08/2018 Tom
4 2 20/08/2018 Mike
5 1 20/08/2018 Dave
我需要一个查询以返回Tom已执行的所有记录,但不包括Dave执行的所有记录。所以我的结果应该是:
ID
2
4
我对ID进行了分组,但是在Haveing子句或子查询中苦苦挣扎,不包括Dave的记录。
我的查询是:
Select * from events where ActionedBy='Tom' Group By ID Having "NOT SURE WHAT GOES HERE"
答案 0 :(得分:0)
一个解决方案可能是
SELECT ID FROM events e
WHERE ActionedBy = 'Tom'
AND NOT EXISTS (SELECT 1 FROM events WHERE ActionedBy = 'Dave' AND ID = e.ID)
如果Tom在单个ID中仅出现一次,则不一定需要GROUP BY。如果不只是添加它......
答案 1 :(得分:0)
我会在group by
子句中使用having
:
select id
from t
where actionedby in ('Tom', 'Dave')
having min(actionedby) = 'Tom' and max(actionedby) = 'Tom';
在这种情况下,实际上min()
就足够了,因为'Tom'
> 'Dave'
。