我有以下数据:
ID Date interval interval_date tot_activity non-activity
22190 2011-09-27 00:00:00 1000 2011-09-27 10:00:00.000 265 15
我有另一个包含此数据的表格:
Date ID Start END sched_non_activity non_activity
10/3/2011 12:00:00 AM HBLV-22267 10/3/2011 2:02:00 PM 10/3/2011 2:11:00 PM 540
现在,在第二个表的non_activity字段中,我希望这是第一个表中的值。但是,我需要捕获tot_activity - non_activity,其中第一个表中的间隔(以15分钟为增量)落在与第二个表的开始和结束相同的时间范围内。
到目前为止,我有以下内容:
SELECT 1.ID, 1.Date, 1.interval, 1.interval_date, 1.tot_activity, 1.non_activity,
1.tot_activity - 1.non_activity AS non_activity
FROM table1 AS 1 INNER JOIN
LIST AS L ON 1.ID = L.ID INNER JOIN
table2 AS 2 ON 1.Date = 2.Date AND L.ID = Right(2.ID,5)
Where 1.interval_date >= 2.Start AND 1.interval_date < 2.End
ORDER BY 1.ID, 1.interval_date
有了这个,我已经可以看到如果表2的开始时间是15:50,我将无法捕获,这意味着我需要捕获间隔15:45。
有没有办法通过查询来做到这一点,或者我应该使用变量,并按间隔进行检查。 任何帮助都会非常感激。
答案 0 :(得分:1)
我很难理解你的问题,但你可能会更幸运地使用DATEDIFF功能:
DATEDIFF(SECOND, 1.interval_date, 2.Start) >= 0 AND DATEDIFF(SECOND, 1.interval_date, 2.End) <= 0
如果我没有抓住你的漂移,我道歉。如果我遗失了什么,你能不能尝试澄清一下?
答案 1 :(得分:1)
我认为你在这里询问的问题太多了。
我要做的是将两个表视为按时间戳排序的列表,并以编程方式解决问题(即不使用单个查询)
例如,创建一个以15分钟为增量遍历第一个表的函数,并在第二个表中找到最佳匹配(我猜这是你要做的)。实现您的函数以返回与上述查询相同的结果集或将其存储在临时表中。从结果集中选择。 T-SQL是你的朋友:)