首页 新闻 会员 周边

请教一个group by语句?

0
[已关闭问题] 关闭于 2012-07-03 14:31

示例数据如下:

 A              B           C                   D                           E                     
----        ---------      ---       ----------------------- ------------------------------------ 
8293        127.0.0.1       1        2011-07-20 11:22:05.093 829D8513-62CF-DD11-B5DC-001F3ADD178A 
8293        127.0.0.1       1        2011-07-20 11:22:16.190 829D8513-62CF-DD11-B5DC-001F3ADD178A 
8294        127.0.0.1       0        2011-07-27 16:47:07.897 829D8513-62CF-DD11-B5DC-001F3ADD178A 
8294        127.0.0.1       0        2011-07-27 16:47:35.847 829D8513-62CF-DD11-B5DC-001F3ADD178A 
8294        127.0.0.1       0        2011-07-27 16:50:56.410 829D8513-62CF-DD11-B5DC-001F3ADD178A
8431        255.255.255.25  1        2011-07-20 13:17:32.397 829D8513-62CF-DD11-B5DC-001F3ADD178A

要按A和E进行分组,最终只要三条数据:

A              B           C                   D                           E                     
----        ---------      ---       ----------------------- ------------------------------------ 
8293        127.0.0.1       1        2011-07-20 11:22:05.093 829D8513-62CF-DD11-B5DC-001F3ADD178A
8294        127.0.0.1       0        2011-07-27 16:50:56.410 829D8513-62CF-DD11-B5DC-001F3ADD178A
8431        255.255.255.25  1        2011-07-20 13:17:32.397 829D8513-62CF-DD11-B5DC-001F3ADD178A

请问这个SQL语句怎么写?

草根程序猿的主页 草根程序猿 | 初学一级 | 园豆:129
提问于:2012-06-25 13:40
< >
分享
所有回答(5)
0

没法两个字段同时group by吧?

select min(A),min(B),......from 表 group by A。

堂堂88 | 园豆:9 (初学一级) | 2012-06-25 13:48
0

你的B、C、D的聚合条件是什么?

按照你的数据,应该是对A、B、C、E进行聚合后求D的最小值吧?

如果是这样,可以写成:

 

select A, B, C min(D), E fromgroup by A, B, C, E
无之无 | 园豆:5095 (大侠五级) | 2012-06-25 14:20

就是A和E不能同时重复(联合主键),其他的字段取最大值

支持(0) 反对(0) 草根程序猿 | 园豆:129 (初学一级) | 2012-06-25 14:22

@菜鸟程序猿: 

select A, max(B) as B, max(C) as C, max(D) as D, E fromgroup by A, E
支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-25 14:24

@笨笨蜗牛: 这样不行啊,B是IP,C是bit型用max会出错的

Operand data type bit is invalid for max operator.
支持(0) 反对(0) 草根程序猿 | 园豆:129 (初学一级) | 2012-06-25 14:27

@菜鸟程序猿: 把B转换一次(使用CAST或者用case-when)再求max。至于IP地址。。。好像是可以求最大最小的吧?如果不行,也只能进行IP转换了(把一个IP转换为整数)。

事实上,对于IP,求大小有意义吗?

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-25 14:32
0

group by A+E

Greatest | 园豆:678 (小虾三级) | 2012-06-25 14:25

group by a, e

group by a+e

是有区别的,而且,问题很大,运行时错误,到时想死的心都有。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-25 22:31
0

select * from 表名 group by A

成长中 | 园豆:108 (初学一级) | 2012-06-29 08:51
0

如果是SQL2005

请使用Row_number()函数

Select * From (

  Select RW=ROW_NUMBER() OVER(Partition By A,E Order By D asc),* From Table1

) a Where RW=1 

Shannon | 园豆:611 (小虾三级) | 2012-07-02 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册