一个SQL分类的问题 求高手
下面是我查询出来的
rowid name age state
------------------------
1 张三 18 start
2 张三 18 end
3 李四 20 start
4 王五 22 end
5 王五 22 start
6 ...
------------------------
只要有end 那必然存在一个状态为 start的 记录条件是除了state 其他都相同的 也就是张三王五 那种情况
现在我怎么才能保留已结束的 去掉与之对应的那些已开始的 李四那种情况默认保留
条件要怎么加呢
理想效果如下
rowid name age state
------------------------
1 张三 18 start
2 张三 18 end
3 李四 20 start
4 王五 22 end
5 王五 22 start
6 ...
------------------------
[解决办法]
delete tb
where state = 'start'
and exists(select 1 from tb as A where A.name=tb.name and A.state='end')
[解决办法]
select * from tb as A
where A.state='end'
or (A.state='start' and not exists(select 1 from tb where name=A.name and state='end'))
[解决办法]
select rowid,name,age,state from
(select *,RANK() over (partition by name order by [state]) as row from test1)
a where row=1
[解决办法]
create table test1(rowid int ,name varchar(20) ,age int, [state] varchar(10))insert into test1 values(1 ,'张三', 18, 'start')insert into test1 values(2 ,'张三', 18, 'end')insert into test1 values(3 ,'李四', 20, 'start')insert into test1 values(4 ,'王五', 22, 'end')insert into test1 values(5 ,'王五', 22, 'start')select rowid,name,age,state from(select *,RANK() over (partition by name order by [state]) as row from test1)a where row=13 李四 20 start4 王五 22 end2 张三 18 end