如何用SQL SERVER取分组数据第一条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用SQL SERVER取分组数据第一条相关的知识,希望对你有一定的参考价值。

请问将两个表合起来并将数据分组,然后要查找出每组数据的第一条的SQL SERVER的语句怎么写啊?谢谢
表如下:
table1
ID name time content
1 a 10 kkkk
2 b 20 llll
3 c 2 dddd

table2
ID table1_ID user
1 1 dddd
2 1 eee
3 2 ffff
4 2 kkkk
5 1 ljk
表1中的ID和表2中的table1_ID是关联的。现要将表2合并到表1中。并且查询出合并后新表每个分组数据的第一条记录。SQL SERVER代码应该如何写?

根据table1_id进行分组所得结果:

select * from (select a.id as a_id,a.name,a.time,a.content,b.id as b_id,b.user from table1 a inner join table2 b on a.id = b.table1_ID) new_tbl where b_id in (select min(id) from table2 group by table1_ID)

扩展资料:

注意事项

在SQL Server数据库中,使用top关键字:SELECT TOP number|percent column_name(s) FROM table_name

mysql数据库中,使用LIMIT关键字:SELECT column_name(s) FROM table_name LIMIT number

例子:SELECT * FROM Persons LIMIT 1 

select   bookName   from   book   where   price   >   20   limit   1; 

limit   1;
or
limit   0,1;

在Oracle数据库中,使用ROWNUM关键字:

SELECT column_name(s) FROM table_name WHERE ROWNUM <= number

例子:SELECT * FROM Persons WHERE ROWNUM <= 1

参考技术A

用row_number函数可以解决。

1、创建测试表及插入数据:

create table test
(id int,
name varchar(10),
score int,
classname varchar(20));

insert into test values (1,'张三',100,'一班');
insert into test values (2,'李四',89,'一班');
insert into test values (3,'王五',97,'一班');
insert into test values (4,'赵六',87,'二班');
insert into test values (5,'孙七',94,'二班');
insert into test values (6,'杨八',76,'二班');

2、查出每个班级的成绩第一名,执行以下语句:

select t.* from
(select test.*,row_number() over (partition by classname order by score desc) rn 
from test) t
where rn=1;

3、结果截图:

参考技术B --不知道你需要依据什么分组,如下是根据table1_id进行分组所得结果
select * from (select a.id as a_id,a.name,a.time,a.content,b.id as b_id,b.user from table1 a inner join table2 b on a.id = b.table1_ID) new_tbl where b_id in (select min(id) from table2 group by table1_ID)本回答被提问者采纳
参考技术C select count(*) from (select count(*) from 表1 a
left join 表2 b on a.字段1=b.字段1
left join 表3 c on a.字段1=c.字段1
group by 字段1 order
by c.字段2 desc) as abcd limit 1
参考技术D 在第一个select 后面直接加一个 top 1,不就可以了吗!?

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)

如题,例如某张表有ID NAME SCORE DATE四个字段。如何取出每个NAME的最大SCORE值所在的那条记录。一个NAME 可以有多个SCORE。如果最大的SCORE重复,去DATE最新的那条。哪位大神帮帮忙。就是分组如何取最大字段所在行的整条数据啊。

参考技术A select * from 

select id,name,score,date,ROW_NUMBER() over(PARTITION by 
name order by score desc,date desc) as num from tablename 
) T where T.num <= 1 
order by name

本回答被提问者和网友采纳

以上是关于如何用SQL SERVER取分组数据第一条的主要内容,如果未能解决你的问题,请参考以下文章

Oracle分组后取每组第一条

sql 怎么分组取行数最大的一条

mysql分组排序,取每组第一条数据

mysql 分组后 每组随机取一条记录 求sql语句

Hive分组取TOPN数据

Mysql 分组以后取每组的前三名数据