如何用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 test.*,row_number() over (partition by classname order by score desc) rn
from test) t
where rn=1;
3、结果截图:
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取分组数据第一条的主要内容,如果未能解决你的问题,请参考以下文章