A表:日期 号码1 号码2 序号
20060101 A1 B1 3
20060101 A1 B1 4
20060101 A1 B1 220060105 C1 D1 2
20070101 A1 B1 1 B表: 日期 号码1 号码2 序号
20060101 A1 B1 4
20060105 C1 D1 2
20070101 A1 B1 1
要求得到B表的结果
说明:日期+号码1+号码2唯一
对日期+号码1+号码2重复的,要序号大的记录,对日期+号码1+号码2不重复的,全要
20060101 A1 B1 3
20060101 A1 B1 4
20060101 A1 B1 220060105 C1 D1 2
20070101 A1 B1 1 B表: 日期 号码1 号码2 序号
20060101 A1 B1 4
20060105 C1 D1 2
20070101 A1 B1 1
要求得到B表的结果
说明:日期+号码1+号码2唯一
对日期+号码1+号码2重复的,要序号大的记录,对日期+号码1+号码2不重复的,全要
日期,号码1,号码2,
MAX(序号) AS 序号
FROM tb
GROUP BY 日期,号码1,号码2
号码1,
号码2,
max(序号) 序号
from a
group by 日期 , 号码1 , 号码2
insert into a values('20060101' , 'A1' , 'B1' , 3 )
insert into a values('20060101' , 'A1' , 'B1' , 4 )
insert into a values('20060101' , 'A1' , 'B1' , 2 )
insert into a values('20060105' , 'C1' , 'D1' , 2 )
insert into a values('20070101' , 'A1' , 'B1' , 1 )
goselect 日期 ,
号码1,
号码2,
max(序号) 序号
from a
group by 日期 , 号码1 , 号码2drop table a/*日期 号码1 号码2 序号
---------- ---------- ---------- -----------
20060101 A1 B1 4
20060105 C1 D1 2
20070101 A1 B1 1(所影响的行数为 3 行)
*/
*
from A t
where not exists(select * from 日期=t.日期 and 号码1=t.号码1 and 号码2=t.号码2 and 序号>t.序号)
declare @A table (日期 nvarchar(10),号码1 nvarchar(10),号码2 nvarchar(10),序号 int)
insert into @A select '20060101','A1','B1',3
union all select '20060101','A1','B1',4
union all select '20060101','A1','B1',2
union all select '20060105','C1','D1',2
union all select '20070101','A1','B1',1
select * from @A a where 序号= (select MAX(序号) from @A where a.日期=日期 and a.号码1=号码1 and 号码2=a.号码2)
order by 序号 desc日期 号码1 号码2 序号
---------- ---------- ---------- -----------
20060101 A1 B1 4
20060105 C1 D1 2
20070101 A1 B1 1(3 行受影响)日期 号码1 号码2 序号
---------- ---------- ---------- -----------
20060101 A1 B1 4
20060105 C1 D1 2
20070101 A1 B1 1(3 行受影响)