日期:2014-05-18 浏览次数:20373 次
create proc getMaxTime ( @hour int --时间间隔(单位:小时) ) as begin declare @time1 datetime declare @time2 datetime declare @state1 int declare @state2 int --查询当前最大时间记录 select @time1=max(times), @state1=state from test group by name --查询hour小时前最大时间记录 select @time2=max(times), @state2=state from test where datediff(hh,times,getdate())>@hour group by name if(@time1 is not null and @time2 is not null) begin if(@state1==2 and @state2==1) begin return @time1 end else begin return @time2 end --相应的其他判断并返回数据 end end
------解决方案--------------------
--> 测试数据:# if object_id('tempdb.dbo.#') is not null drop table # create table #(name varchar(8), types varchar(8), state int, times datetime) insert into # select 'A', 'AA', 1, '2011-12-30 09:35:54' union all select 'A', 'AA', 1, '2011-12-30 09:35:54' union all select 'A', 'AA', 1, '2011-12-30 09:35:54' union all select 'A', 'BB', 1, '2011-12-30 09:35:54' union all select 'A', 'BB', 1, '2011-12-30 09:35:54' union all select 'A', 'BB', 1, '2011-12-30 09:35:54' union all select 'A', 'AA', 1, '2011-12-30 09:45:54' union all select 'A', 'AA', 1, '2011-12-30 09:45:54' union all select 'A', 'AA', 1, '2011-12-30 09:45:54' union all select 'A', 'BB', 1, '2011-12-30 09:45:54' union all select 'A', 'BB', 1, '2011-12-30 09:45:54' union all select 'A', 'BB', 1, '2011-12-30 09:45:54' union all select 'A', 'BB', 1, '2011-12-30 11:45:54' union all select 'A', 'AA', 1, '2011-12-30 11:45:54' union all select 'A', 'AA', 2, '2011-12-30 11:45:54' union all select 'A', 'AA', 1, '2011-12-30 11:45:54' union all select 'A', 'BB', 1, '2011-12-30 11:45:54' union all select 'A', 'BB', 2, '2011-12-30 11:45:54' union all select 'A', 'BB', 1, '2011-12-30 11:45:54' union all select 'A', 'BB', 2, '2011-12-30 11:45:54' select * from # t where state=2 and exists (select 1 from # where types=t.types and state=1 and datediff(hour,times,t.times)=2) /* name types state times A AA 2 2011-12-30 11:45:54 A BB 2 2011-12-30 11:45:54 A BB 2 2011-12-30 11:45:54 */