表info的基本结构和数据如下,其中sid(小类)和bid(大类)有从属关系,即sid相同的bid必定相同
ID CONTENT BID SID
-----------------------------------
1 1 内容1 1 1
2 2 内容2 1 1
3 3 内容3 1 2
4 4 内容4 2 3
5 5 内容5 1 4
6 6 内容6 2 3
7 7 内容7 2 5按以下条件查询,sid相同的只显示一条,bid相同的靠在一起,即希望的结果如下 ID CONTENT BID SID
-----------------------------------
1 1 内容1 1 1
2 3 内容3 1 2
3 5 内容5 1 4
4 4 内容4 2 3
5 7 内容7 2 5请问应该如何写sql语句?对oracle不熟,请各位指教了,多谢;
测试数据对应的SQL语句
create table info(id varchar(5), content varchar(100), bid varchar(5), sid varchar(5));
insert into info values('1', '内容1', '1', '1');
insert into info values('2', '内容2', '1', '1');
insert into info values('3', '内容3', '1', '2');
insert into info values('4', '内容4', '2', '3');
insert into info values('5', '内容5', '1', '4');
insert into info values('6', '内容6', '2', '3');
insert into info values('7', '内容7', '2', '5');
ID CONTENT BID SID
-----------------------------------
1 1 内容1 1 1
2 2 内容2 1 1
3 3 内容3 1 2
4 4 内容4 2 3
5 5 内容5 1 4
6 6 内容6 2 3
7 7 内容7 2 5按以下条件查询,sid相同的只显示一条,bid相同的靠在一起,即希望的结果如下 ID CONTENT BID SID
-----------------------------------
1 1 内容1 1 1
2 3 内容3 1 2
3 5 内容5 1 4
4 4 内容4 2 3
5 7 内容7 2 5请问应该如何写sql语句?对oracle不熟,请各位指教了,多谢;
测试数据对应的SQL语句
create table info(id varchar(5), content varchar(100), bid varchar(5), sid varchar(5));
insert into info values('1', '内容1', '1', '1');
insert into info values('2', '内容2', '1', '1');
insert into info values('3', '内容3', '1', '2');
insert into info values('4', '内容4', '2', '3');
insert into info values('5', '内容5', '1', '4');
insert into info values('6', '内容6', '2', '3');
insert into info values('7', '内容7', '2', '5');
(select t.*, row_number() over(partition by bid,sid order by id) rn from info t)
where rn = 1
order by bid;
from info a
where not exists (select 1
from info
where SID=a.SID and ID<a.ID)
order by id
(select t.*, row_number() over(partition by bid,sid order by id) rn from info t)
where rn = 1
order by bid;