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

求一关于group的sql解决方案

2013-03-16 
求一关于group的sql本帖最后由 novernover 于 2013-03-13 17:13:50 编辑以A列分组,每组中B列最小的记录的C

求一关于group的sql
本帖最后由 novernover 于 2013-03-13 17:13:50 编辑 以A列分组,每组中B列最小的记录的C列的值,没多少分,求众大牛帮忙!

A       B       C
-------------------
a       1       10
a       2       20
a       3       30
b       2       40
b       3       50
b       4       60
c       6       70
c       3       80
c       5       90

要求结果为:
A       B       C
-------------------
a       1       10
b       2       40
c       3       80
sql
[解决办法]
select * from tb as t where not exists (select 1 from tb where A=t.A and B<t.B)
[解决办法]

----------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-03-13 17:18:48
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--Jun 17 2011 00:54:03 
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([A] varchar(1),[B] int,[C] int)
insert [huang]
select 'a',1,10 union all
select 'a',2,20 union all
select 'a',3,30 union all
select 'b',2,40 union all
select 'b',3,50 union all
select 'b',4,60 union all
select 'c',6,70 union all
select 'c',3,80 union all
select 'c',5,90
--------------开始查询--------------------------

select * from [huang] a 
WHERE EXISTS (SELECT 1 FROM (SELECT a,MIN(b)b FROM huang GROUP BY a) b WHERE a.a=b.a AND a.b=b.b)
----------------结果----------------------------
/* 
A    B           C
---- ----------- -----------
a    1           10
b    2           40


c    3           80

(3 行受影响)
*/


[解决办法]
;with cte as
(select *,row_number() over(partition by A order by B)rn from tb )
select * from cte where rn=1
[解决办法]
select a,b,c from(select *,r=row_number() over(partition by A order by B) from tb)t where r=1

热点排行