根据条件过滤DB2组

时间:2018-08-20 19:10:35

标签: sql group-by db2 where having

我有一个记录的多个版本的数据集。在下面的结构中:

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"  

2 个答案:

答案 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'