SQL查询数据问题

时间:2011-10-04 18:46:07

标签: sql sql-server-2005

我有以下数据:

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。

有没有办法通过查询来做到这一点,或者我应该使用变量,并按间隔进行检查。 任何帮助都会非常感激。

2 个答案:

答案 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是你的朋友:)