首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

对表一按课程编号分组,找出最小星期的那条记录,请前辈指导!先感谢前辈了

2013-09-05 
对表1按课程编号分组,找出最小星期的那条记录,请前辈指导!先感谢前辈了!对表1按课程编号分组,找出最小星期

对表1按课程编号分组,找出最小星期的那条记录,请前辈指导!先感谢前辈了!
对表1按课程编号分组,找出最小星期的那条记录,请前辈指导!

表1 
课程编号  星期 移动电话     姓名
20001   1  13808140811  张三
20001   2  13808140811  张三
20003   1  13808140813  张三
20004   3  13808140814  张四
20004   5  13808140814  张四
20004   1  13808140814  张四
20005   1  13808140815  张五



[解决办法]

if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [课程编号] varchar(100), [星期] varchar(100), [移动电话] varchar(100), [姓名] varchar(100));
insert #temp
select '20001','1','13808140811','张三' union all
select '20001','2','13808140811','张三' union all
select '20003','1','13808140813','张三' union all
select '20004','3','13808140814','张四' union all
select '20004','5','13808140814','张四' union all
select '20004','1','13808140814','张四' union all
select '20005','1','13808140815','张五' 

--SQL:
;WITH cte AS
(
select rowid=ROW_NUMBER() OVER(PARTITION BY [课程编号] ORDER BY 星期), * from #temp
)
SELECT * FROM cte
WHERE rowid  = 1

[解决办法]
--方法3
SELECT b.* FROM
(SELECT DISTINCT [课程编号] FROM #temp) a
CROSS APPLY
(SELECT TOP(1) * FROM #temp m WHERE m.[课程编号] =a.[课程编号] ORDER BY 星期) b

[解决办法]
create table #tb
(课程编号 varchar(10), 星期 int, 移动电话 varchar(20), 姓名 varchar(10))

insert into #tb
 select '20001', 1, '13808140811', '张三' union all
 select '20001', 2, '13808140811', '张三' union all
 select '20003', 1, '13808140813', '张三' union all
 select '20004', 3, '13808140814', '张四' union all


 select '20004', 5, '13808140814', '张四' union all
 select '20004', 1, '13808140814', '张四' union all
 select '20005', 1, '13808140815', '张五'


select A.*
from #tb A
inner join (select 课程编号,MIN(星期) as 星期 from #tb group by 课程编号)B
on A.课程编号=B.课程编号 and A.星期=B.星期

/*
课程编号星期移动电话姓名
20001113808140811张三
20003113808140813张三
20004113808140814张四
20005113808140815张五
*/

热点排行