【发布时间】:2018-04-27 12:20:22
【问题描述】:
这是我的数据库结构 创建数据库testGroupfirst; 去
use testGroupfirst;
go
create table testTbl (
id int primary key identity,name nvarchar(50) ,year int ,degree int , place nvarchar(50)
)
insert into testTbl values ('jack',2015,50,'giza')
insert into testTbl values ('jack',2016,500,'cai')
insert into testTbl values ('jack',2017,660,'alex')
insert into testTbl values ('jack',2018,666,'giza')
insert into testTbl values ('jack',2011,50,'alex')
insert into testTbl values ('rami',2015,5054,'giza')
insert into testTbl values ('rami',2016,1500,'cai')
insert into testTbl values ('rami',2017,66220,'giza')
insert into testTbl values ('rami',2018,6656,'alex')
insert into testTbl values ('rami',2011,540,'cai')
insert into testTbl values ('jack',2010,50,'cai')
select * from testTbl
这是迄今为止的结果
我创建了一个简单的组
按名称、年份、学位、地点从 testTbl 组中选择姓名、年份、学位、地点
如图 2 所示 - 我想获取第一个用户的数据和他们第一年的详细描述 - cursor 可以做到,但我不想使用它,我认为有很多方法可以更好地处理这种情况,比如 cross apply 或 cte 。 我在这里找到了一个相关的问题 Get top 1 row of each group 但这在我的情况下不起作用,或者我无法应用它,所以我在这里提出了这个新问题。
所以我需要从每个组(用户)中获取第一行(前 1 行)并希望获取第一条记录,并且必须包含用户在其中工作的第一年(按 desc 排序)
【问题讨论】:
标签: sql-server group-by sql-order-by filtering common-table-expression