示例数据如下:
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语句怎么写?
没法两个字段同时group by吧?
select min(A),min(B),......from 表 group by A。
你的B、C、D的聚合条件是什么?
按照你的数据,应该是对A、B、C、E进行聚合后求D的最小值吧?
如果是这样,可以写成:
select A, B, C min(D), E from 表 group by A, B, C, E
就是A和E不能同时重复(联合主键),其他的字段取最大值
@菜鸟程序猿:
select A, max(B) as B, max(C) as C, max(D) as D, E from 表 group by A, E
@笨笨蜗牛: 这样不行啊,B是IP,C是bit型用max会出错的
Operand data type bit is invalid for max operator.
@菜鸟程序猿: 把B转换一次(使用CAST或者用case-when)再求max。至于IP地址。。。好像是可以求最大最小的吧?如果不行,也只能进行IP转换了(把一个IP转换为整数)。
事实上,对于IP,求大小有意义吗?
group by A+E
group by a, e
和
group by a+e
是有区别的,而且,问题很大,运行时错误,到时想死的心都有。
select * from 表名 group by A
如果是SQL2005
请使用Row_number()函数
Select * From (
Select RW=ROW_NUMBER() OVER(Partition By A,E Order By D asc),* From Table1
) a Where RW=1