SQL查询数据问题

SQL查询数据问题,sql,sql-server-2005,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

我有以下数据:

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_活动-非_活动,其中第一个表的间隔(以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 
选择1.ID,1.Date,1.interval,1.interval\u Date,1.tot\u activity,1.non\u activity,
1.tot_活动-1.非_活动作为非_活动
表1中的1个内部联接
在1.ID=L.ID内部联接上列为L
表2为1上的2。日期=2。日期,L.ID=右侧(2.ID,5)
其中1.interval\u date>=2.Start和1.interval\u date<2.End
按1.ID、1.U日期订购
有了这个,我已经可以看到,如果表2的开始时间是15:50,我将无法捕获,这意味着我需要捕获间隔15:45


有没有办法通过查询来实现这一点,或者我应该使用变量,并按间隔进行检查。如果有任何帮助,我们将不胜感激。

我很难理解您的问题,但使用DATEDIFF函数您可能会更幸运:

DATEDIFF(SECOND, 1.interval_date, 2.Start) >= 0 AND DATEDIFF(SECOND, 1.interval_date, 2.End) <= 0

DATEDIFF(SECOND,1.interval\u date,2.Start)>=0和DATEDIFF(SECOND,1.interval\u date,2.End)我认为您对这里的查询要求太高了

我要做的是将这两个表视为按时间戳排序的列表,并以编程方式解决问题(即不使用单个查询)


例如,创建一个函数,以15分钟为增量遍历第一个表,并在第二个表中找到最佳匹配项(我猜这就是您要做的)。实现函数以返回与上述查询相同的结果集,或将其存储在临时表中。从结果集中选择。T-SQL是你的朋友:)

你的约会对象有问题吗?是的,我无法从开始时间的重要时间段抓取数据。正如我在上面写的,我的间歇时间是每15分钟一次。因此,如果开始时间是15:50,我需要从15:45的时间间隔中获取tot_活动和非活动。别担心,我总是很难解释事情。正如我所能描述的那样,表1以秒为单位按时间间隔显示了特定状态的登录数据。表2有相同状态的计划数据,但有开始和结束时间。表2有时有不正确的数据,所以我在表1中验证表2的日期时间,看看表1中有多少活动,与表2相比。这个解释有意义吗?我想我有点明白了。我认为这只是一个很难解释的问题。通过第二个进行DATEDIFF比较会有帮助吗?不完全是。正如loud在下面写到的,也许这是一个使用t-SQL解决的问题。是的,似乎是这样,但我在变量和循环等方面缺乏经验。谢谢你的回答。了解pl/sql、t-sql等知识非常有用。当你遇到这样的问题时,它们非常有用,而且很可能你会再次遇到这样的问题。