题目
有如下ABC三列和几组数据
想得到如下结果
该如何写查询?
提示:可以使用聚合函数或者lag函数来求解
数据准备
create table day_04 (a varchar(20),b int,c varchar(10));insert into day_04 values('aaa',1,'X');insert into day_04 values('aaa',2,'Y');insert into day_04 values('bbb',3,'X');insert into day_04 values('bbb',4,'X');insert into day_04 values('ccc',5,'Y');insert into day_04 values('ccc',6,'Y');
解题思路
- 题目提示lag函数,利用开窗函数先求出C字段中两两是否相同,不同则为1,相同则为C字段 ```sql select a , sum(b) over(partition by a) as b , case when lag(c,1) over(partition by a order by b) = c then c else ‘1’ end as c from day_04
2. 再通过rn=1取出每个组的第一行```sqlselect a,b,cfrom(select a, sum(b) over(partition by a) as b, case when lag(c,1) over(partition by a order by b) = c then c else '1' end as c, row_number() over(partition by a order by b desc) as rnfrom day_04) t1 where t1.rn = 1 ;

