指各路过的指点下如此存储过程该如何写为好?(100分)

  • 主题发起人 主题发起人 jiafei528
  • 开始时间 开始时间
J

jiafei528

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:我有一表,有两字段 日期 气温
2006-01-01 25
. .
. .
. .
2006-01-28 20
. .
. .
2006-05-01 30
. .
. .



我想在存储过程中求出某月的第一天和最后一天的气温数据?
如果求某月的最高气温和最低气温就好做.
 
下午写给你!
吃饭先。
 
Create proc sp_Temp2
@Date DateTime

as
begin
Declare
@BeginDate DateTime,
@EndDate dateTime


set @beginDate = CONVERT(datetime,CONVERT(char(8),@Date,120)+'1')
set @EndDate = DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@Date),120)+'1')

--如果求月初和月底使用这句查询
select *
from t_Temp
where (Str(Year(HapdDate), 4) + '-' + Str(Month(HapdDate), 2) + '-' + Str(Day(HapdDate), 2)) in (@BeginDate, @EndDate)

--如果求一个月之间的最大数使用这个查询
select hapddate, qty
from t_temp
where qty = (select max(qty) from t_temp
where (str(year(hapddate), 4) + '-' + str(month(hapddate), 2) + '-' + str(day(hapddate), 2)) between @begindate and @enddate)



end

sp_Temp2 '2006-06-05'
使用时存入一个月中的任何一天就可以查询到了。
注:现在的存储过程只能两者选择其一,如果需要一个存储过程需要两个功能的话,
可以在存储过程中定义多一个变量,那么在过程中用if判断就可以执行了。
 
create procedure GetFirstAndLastQW
@year int,
@month int
as
select 日期,气温
from tablename
where 日期=(select max(日期) from tablename where year(日期)=@year and month(日期)=@month) or 日期=(select mix(日期) from tablename where year(日期)=@year and month(日期)=@month)
 
Create table table1
( HapDate smalldatetime,
Tempr money
)

select select a.*
from (
select Month1=SubString(Replace(CONVERT(varchar(10),HapDate,120),'-',''),5,2),
Day1 =SubString(Replace(CONVERT(varchar(10),HapDate,120),'-',''),7,2),
Tempr
from table1
) a join
(
select Month1=SubString(Replace(CONVERT(varchar(10),HapDate,120),'-',''),5,2),
Min(SubString(Replace(CONVERT(varchar(10),HapDate,120),'-',''),7,2)) As MinDay,
Max(SubString(Replace(CONVERT(varchar(10),HapDate,120),'-',''),7,2)) As MaxDay

from table1
group by SubString(Replace(CONVERT(varchar(10),HapDate,120),'-',''),5,2)
) b on a.Month1 = b.Month1 and (Day1 = MinDay or Day1=MaxDay)
order by a.Month1, Day1
 
补充一点,这里的月初月底并不是指年月份的第一天和最后一天,而是指记录中存在的记录日期的第一天和最后一天,如2006-03月,可能指的2006-03-06和2006-03-25对应的气温...
 
有必要存储过程么,写个函数多好解决,还可以根据输入参数返回最大,最小,开始,结束.
 
头一天
select 日期,气温 from tbl1
where 日期 in (select min(日期) from tbl1 where 日期='根据你输入的日期')
最后一天
select 日期,气温 from tbl1
where 日期 in (select max(日期) from tbl1 where 日期='根据你输入的日期')
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部