日期:2014-05-17  浏览次数:20590 次

sql:取最大值
需求:同一行数据取得最大值
测试的数据如下:

create table testmax(city varchar(100),date datetime,num1 float,num2 float,num3 float,num4 float)
insert into testmax values('广州市','2013-10-01',1.3,45.0,2.4,30.05)
insert into testmax values('广州市','2013-10-02',1,2,3,4)
insert into testmax values('广州市','2013-10-03',140.3,45.0,2.4,30.05)
insert into testmax values('广州市','2013-10-04',1.3,45.0,9,30.05)


需要的结果如下:
city date                      max_num
广州市 2013-10-01 00:00:00.000   45.0
广州市 2013-10-02 00:00:00.000   4
广州市 2013-10-03 00:00:00.000   140.3
广州市 2013-10-04 00:00:00.000   45.0

各路神人路过求指导
------解决方案--------------------
那就换个方法试试:


create table testmax(city varchar(100),date datetime,num1 float,num2 float,num3 float,num4 float)
insert into testmax values('广州市','2013-10-01',1.3,45.0,2.4,30.05)
insert into testmax values('广州市','2013-10-02',1,2,3,4)
insert into testmax values('广州市','2013-10-03',140.3,45.0,2.4,30.05)
insert into testmax values('广州市','2013-10-04',1.3,45.0,9,30.05)

select city,[date],max_num=case when max_num1>max_num2 then max_num1 else max_num2 end
from 
(select city,[date],max_num1=case when num1>num2 then num1 else num2 end
,max_num2=case when num3>num4 then num3 else num4 end
from testmax
)t


/*
city date max_num
广州市 2013-10-01 00:00:00.000 45
广州市 2013-10-02 00:00:00.000 4
广州市 2013-10-03 00:00:00.000 140.3
广州市 2013-10-04 00:00:00.000 45
*/

------解决方案--------------------
引用:
Quote: 引用:

那就换个方法试试:


create table testmax(city varchar(100),date datetime,num1 float,num2 float,num3 float,num4 float)
insert into testmax values('广州市','2013-10-01',1.3,45.0,2.4,30.05)
insert into testmax values('广州市','2013-10-02',1,2,3,4)
insert into testmax values('广州市','2013-10-03',140.3,45.0,2.4,30.05)
insert into testmax values('广州市','2013-10-04',1.3,45.0,9,30.05)

select city,[date],max_num=case when max_num1>max_num2 then max_num1 else max_num2 end
from 
(select city,[date],max_num1=case when num1>num2 then num1 else num2 end
,max_num2=case when num3>num4 then num3 else num4 end
from testmax
)t


/*
city date max_num
广州市 2013-10-01 00:00:00.000 45
广州市 2013-10-02 00:00:00.000 4
广州市 2013-10-03 00:00:00.000 140.3
广州市 2013-10-04 00:00:00.000 45
*/
如果有十几个num。。。。


写函数与是得一一比较,基本上只能用这个方法,如果再多就再加一层子查询.
感觉是比union all方法要好一些。
sql2005新建作业有关问题,新建作业,各项参数设置完成后,无法新建作业