T-SQL循环过程

时间:2011-10-04 21:41:50

标签: sql sql-server-2005 tsql

我有以下数据:

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分钟为增量)落在与第二个表的开始和结束相同的时间范围内。

我已经尝试过设置变量并设置一个循环,其中每行按间隔验证启动时间,但我不知道如何只返回一个只有一条记录的变量,因为我不断收到错误,我的变量太多了结果

我试过到处寻找教程,我找不到任何可以帮助我的东西。任何人都有关于他们可以分享的循环的指针或教程吗?

1 个答案:

答案 0 :(得分:2)

你需要以某种方式生成间隔结束日期;我假设第一个表中总有一条记录,间隔记录为15分钟。在这种情况下,示例如下所示:

;WITH Intervals
AS
(SELECT
     Interval_date
     ,DATEADD(ms,840997,Interval_date) AS interval_end
    ,nonactivity
FROM A)

--Select query for Validation
--SELECT 
--  b.[Date]
--  ,b.ID 
--  ,b.Start
--  ,b.sched_non_activity
--  ,i.nonactivity
--FROM B
--JOIN Intervals AS i
--ON b.Start >= i.Interval_date 
--AND b.[END] <= i.interval_end 

UPDATE B
    SET non_activity = i.nonactivity
FROM  B
JOIN Intervals AS i
ON b.Start >= i.Interval_date   
AND b.[END] <= i.interval_end   

显然,您可能需要根据具体情况进行调整。