我有两张桌子。加入时间范围查询
MAP
Product Channel ProgDate AdvTime
Air Pix 30-04-2011 20:57:16
Air Pix 30-05-2011 00:55:08
MBA
Product Channel Date ProgStartTime ProgEndTime
Air Pix 30-04-2011 23:00:00 02:00:00
Air Pix 30-04-2011 21:00:00 22:00:00
我要检查是否AdvtTime在MAP是MBA表StartTime
& EndTime
之间。
但是,当持续时间(ProgStartTime
-ProgEndTime
)是一个小时我需要一个+或 - 5分钟的缓冲区。
我需要 00:05:08 to match 23:00:00
到02:00:00
,并 20:57:16 to match 21:00:00
至22:00:00
。
我用下面的查询加入
Select Distinct mb.Id as mbaid,mp.id as mapid, mp.Channel as Channel, mp.Product,mp.ProgDate, mp.AdvTime, mb.Channel, mb.ProgStartTime,
mb.ProgEndTime, convert(time, dateadd(minute, datediff(minute, mb.progStartTime, mb.progEndTime), 0)) as timeDiff from map22 as mp inner join mba22 as mb
on ((mp.ProgDate = mp.ProgDate and mp.Channel=mb.Channel and mp.Product=mb.Product))
where (mp.ProgDate = mb.ProgDate
AND AdvTime >= ProgStartTime
AND (AdvTime <= ProgEndTime OR ProgEndTime < ProgStartTime))
OR
(mp.ProgDate = Dateadd(day,1,mb.ProgDate)
AND ProgEndTime < ProgStartTime
AND AdvTime <= ProgEndTime)
order by mp.Id asc
请不要问重复的问题 - http://stackoverflow.com/questions/15477708/sql-join-with-a-buffer-时间 – rbedger 2013-03-18 17:13:33
很抱歉,我没有得到正确的结果,因为我的问题没有明确的框架。有人可以帮我解决这个问题 – 2013-03-18 17:15:41
你能提供表格的列数据类型详细信息吗? – 2013-03-18 17:33:34