如何用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

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-02

用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、结果截图:

第2个回答  2010-03-26
--不知道你需要依据什么分组,如下是根据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)本回答被提问者采纳
第3个回答  2018-11-05
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
第4个回答  2010-03-26
在第一个select 后面直接加一个 top 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 查询,一共三列,怎样查出第一个列值相同,第二列值最大的第...
《按某列分组,求另一列最大或最小值所在整行数据的方法》利用子查询,试一下,很好用的(a1可根据需要去掉):select a2,a1 from tablename where taborder=(select max(taborder) from tablename a where a.a2=tablename.a2)查出结果为 a,2 b,5 c,6 ...

Oracle分析函数:First
1. 使用DISTINCT与不使用DISTINCT,对FIRST_VALUE函数是有区别的,使用DISTINCT的FIRST_VALUE函数效果等类似于SQL Server中的first(),取得所有分组中的第一条数据。如果不使用DISTINCT,FIRST_VALUE函数的执行结果,按照楼上的例子,按照POS分组,对于每个NAME,都返回本组的第一个值(first_value)SELECT DIS...

sql根据某一个字段重复只取第一条数据
select * from team where teamId in (select teamId from team group by teamId having count(teamId) > 1) 删除表中多余的重复记录,重复记录是根据单个字段(teamId)来判断,只留有rowid最小的记录 delete from team where teamName in(select teamName from team group by teamName having ...

SQL SERVER分组后查询最大日期的ID
用分析函数row_number来给分组内的记录编号,然后取编号值为1的记录即可。select s.*from ( select v.*, row_number() over (partition by b order by c desc) as order_num from #b v) swhere s.order_num = 1

SQLServer中使用语句取各分类中的前几条记录
建立表结构如下:CREATE table [dbo].[tmp_Trans](IDintidentity,PO_NO varchar(20) null,PO_Itemno varchar(20) null,Qty numeric(18,6) null,Trans_Date datetime null,Doc_no varchar(20) null)要求取相同PO_NO按Trans_Date倒序排序的前两条记录。1.Where子句嵌套SELECT的方式。在嵌套的...

sql查询 分组后 每组某字段值最大的一行所有列
1、第一个方法,需要考虑ID有重复值的问题,如果最大值存在重复值,那么结果也重复。SELECT * FROM 员工信息变化表 T1 WHERE id = (SELECT Max (id) FROM 员工信息变化表 T2 WHERE T1.员工ID = T2.员工ID)2、第二个方法:该语句是在SQL Server中编写的,应该不适用于MySQ和Oracle。排...

SQL server 里面如何实现 First() 的功能?
select name,status,min(datatime) from table group by name

sql server 中group by 的用法
就是分组进行譬如,学生表student里有多个班级(classid)的学生,现在要统计每个班有多少学生,就用select classid,count(*)as num from student group by classid,显示的结果就是班级号和班级的学生人数

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)_百度知...
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

相似回答