oracle 表内做计算再统计的SQL语句怎么写 需要算的内容如下
人员编号变动类型时间8001新增2016-05-138001删除2016-05-148001新增2016-05-158002新增2016-05-138002删除2016-...
人员编号 变动类型 时间
8001 新增 2016-05-13
8001 删除 2016-05-14
8001 新增 2016-05-15
8002 新增 2016-05-13
8002 删除 2016-05-14
8002 新增 2016-05-15
8002 删除 2016-05-16
·
·
·
把人员的类型新增总和 - 删除总和 = 1 的人 累加 最后统计出共有多少人且把这些人的最后一次变动类型的时间统计出来
是不是要分两个语句写,具体怎么写,在线等,T_T 展开
8001 新增 2016-05-13
8001 删除 2016-05-14
8001 新增 2016-05-15
8002 新增 2016-05-13
8002 删除 2016-05-14
8002 新增 2016-05-15
8002 删除 2016-05-16
·
·
·
把人员的类型新增总和 - 删除总和 = 1 的人 累加 最后统计出共有多少人且把这些人的最后一次变动类型的时间统计出来
是不是要分两个语句写,具体怎么写,在线等,T_T 展开
1个回答
展开全部
select count(*)
from (select 人员编号,
sum(case
when 变动类型 = '新增' then
1
else
0
end) as 新增次数,
sum(case
when 变动类型 = '删除' then
1
else
0
end) as 删除次数
from ceshi
group by 人员编号)
where 新增次数 - 删除次数 = 1;
select max(时间), 人员编号
from ceshi
where 人员编号 in (select 人员编号
from (select 人员编号,
sum(case
when 变动类型 = '新增' then
1
else
0
end) as 新增次数,
sum(case
when 变动类型 = '删除' then
1
else
0
end) as 删除次数
from ceshi
group by 人员编号)
where 新增次数 - 删除次数 = 1)
group by 人员编号;
from (select 人员编号,
sum(case
when 变动类型 = '新增' then
1
else
0
end) as 新增次数,
sum(case
when 变动类型 = '删除' then
1
else
0
end) as 删除次数
from ceshi
group by 人员编号)
where 新增次数 - 删除次数 = 1;
select max(时间), 人员编号
from ceshi
where 人员编号 in (select 人员编号
from (select 人员编号,
sum(case
when 变动类型 = '新增' then
1
else
0
end) as 新增次数,
sum(case
when 变动类型 = '删除' then
1
else
0
end) as 删除次数
from ceshi
group by 人员编号)
where 新增次数 - 删除次数 = 1)
group by 人员编号;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询