SQL 分组后获取每组中最大值

本文介绍如何使用 SQL Server 2008 进行数据表的创建与数据插入操作,并探讨了不同 SQL 查询方法来获取特定的数据视图,包括如何统计重复的 code 记录并选择最小日期的记录。

场景:sql server 2008

 1 drop table ID
 2 CREATE TABLE ID  
 3 (  
 4 id int identity(1,1)  not null,
 5 code int ,
 6 D date,
 7  PRIMARY KEY  (id)
 8 )  
 9 
10 insert into ID(code,D) values(0001,getdate())  
11 insert into ID(code,D) values(0002,getdate()) 
12 insert into ID(code,D) values(0002,getdate()) 
13 insert into ID(code,D) values(0003,getdate()) 
14 insert into ID(code,D) values(0003,'2017-08-02') 
15 insert into ID(code,D) values(0003,'2017-08-01') 
16 
17 select * from ID

目标:

select COUNT(*) from ID group by code

产生code列唯一的3行数据,并显示最小的D列数据

 

方案1:

select code,MIN(D)
from ID group by code

方案2:

是否有重复code行

select COUNT(*) from ID where
code in(select code from ID group by code having COUNT(*) > 1)

@1

select * into #a from ID
delete from #a
where code in (select code from #a group by code having count(code) > 1)
and D not in (select min(D) from #a group by code having count(code) > 1)
select * from #a

删掉记录数最多的中一条数据

反复执行

方案3:

select code,D from
(
select MIN(D) from ID where COUNT(code)>1
)t1 right join ID t2 on t1.D=t2.D

转载于:https://www.cnblogs.com/Unknw/p/7280947.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值