前提,
1,一张表中,暂时取表名 Tb_name1
2, 多个字段,多条记录。 比如说year,month,id,name四个字段,name存储很多人的名字,其中name为同一个人的名字有多条数据
3,获取不同name的最小的year和最小的month的其中的id字段
比如说:
year month id name
2014 10 1 a
2014 9 2 a
2013 12 3 a
2013 1 4 a
2013 2 5 a
2014 10 6 b
2015 9 7 b
2012 12 8 b
2012 1 9 b
2012 2 10 b
2014 10 11 b
2015 11 12 b
2013 12 13 c
2013 1 14 c
2013 2 15 c
好了, 我要查出每个人的最小year和最小month的id, 像下面一样
year month id name
2013 1 4 a
2012 1 9 b
2013 1 14 c
在线等啊。。。急啊。 已经晕了,我。。。
------解决思路----------------------
;WITH CTE AS(
SELECT ROW_NUMBER()OVER(PARTITION BY[name]ORDER BY[year],[month])RN,*FROM Tb_name1
)
SELECT[year],[month],[id],[name]FROM CTE WHERE RN=1
SQL2005+有效
你参考一下
------解决思路----------------------
select * from(
SELECT Tb_name.*,ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY YEAR,MONTH) RN FROM Tb_name1
) A where rn=1
------解决思路----------------------
的确被你的描述绕晕。看到你的结果 焕然大悟啊。
select * from (select *,row_number()over(partition by name order by year ,month) as n from Tb_name1)
as t
where t.n=1
------解决思路----------------------
use tempdb
create table test([year] int,[month] int,id int ,name varchar(10))
insert into test
select 2014, 10 , 1 , 'a' union all
select 2014, 9 , 2 , 'a' union all
select 2013, 12, 3 , 'a' union all
select 2013, 1 , 4 , 'a' union all
select 2013, 2 , 5 , 'a' union all
select 2014, 10 , 6 , 'b' union all
select 2015, 9 , 7 , 'b' union all
select 2012, 12, 8 , 'b' union all