我有一个Oracle数据库,我需要一个查询来进行报告。在我的表中,我有action_types和动作的日期。我想要计算某些组中的操作数量,并显示该类型的最新操作。
所以我想要的是像
Group Number Date
Administrative 3 01/02/2015
User 1 01/03/2015
View-Only 2 01/04/2015
问题是每个组都包含多个action_types,因此表本身看起来像
Action_Type Date
01 01/02/2015
04 01/03/2015
02 01/02/2015
03 01/02/2015
05 01/03/2015
06 01/04/2015
如果操作01,02,03都是管理操作,则04是用户操作,05和06是仅查看操作。
我可以编写一个查询,它将返回我想要的单行 - 单个组的编号和最近日期,但是我想要一个将所有组放在一起的查询,每个组都有自己的行如上。这可能吗?
答案 0 :(得分:5)
我认为您只需要case
语句进行分组:
select (case when Action_Type in ('01', '02', '03') then 'Administrative'
when Action_Type in ('04') then 'User'
when Action_Type in ('05', '06') then 'View-Only'
else 'Unknown'
end) as Action_Group, count(*), max(date)
from actions a
group by (case when Action_Type in ('01', '02', '03') then 'Administrative'
when Action_Type in ('04') then 'User'
when Action_Type in ('05', '06') then 'View-Only'
else 'Unknown'
end) ;
但是,我建议您为包含所需分组的操作类型创建一个引用表(如果您还没有这样的表)。