sql - TSQL - Find the minimum in the range -
edit: problem statement: select siiis , sulls data between start of mar , end of may
for each “xfff” in siiis matches in “xfff” in sulls “start_time” in sulls after “case_create” in siiis , time difference between “start_time” , “case_create” less 3 hours. select match smallest time difference
select si.xfff xfff, datediff(hour, si.case_create, su.start_time) diffinhours siiis si inner join sulls su on si.xfff= su.xfff ((si.case_create between '20130301' , '20130531') , (su.start_time between '20130301'and '20130531')) , (su.start_time > si.case_create) , (datediff(hour, si.case_create, su.start_time) < 3 , datediff(hour, si.case_create, su.start_time) > 0)
tried clean , fix code, should runs on sqlserver 2008+, datediff not give difference in hours(very common misunderstanding), took different approach:
select si.num_phone phone, su.start_time sulstarrttime , si.case_create sistarttime, datediff(hour, 0, su.start_time - si.case_create) diffinhours siiis si cross apply (select top 1 * sulls su si.xfff= su.xfff , su.start_time > si.case_create -- less 3 hours difference , dateadd(hour, 3, si.case_create) > su.start_time -- more 1 hour difference code indicated needed this, text said otherwise --and dateadd(hour, 1, si.case_create) <= su.start_time order start_time ) su si.case_create between '20130301' , '20130531' -- not including of may
Comments
Post a Comment