返回连续行之间的列值

时间:2013-11-07 01:50:54

标签: sql sql-server-2005

我有一张表返回了许多第2列,其中的时间戳代表工人轮班的'in'和'out'。我想为位于2个给定时间戳之间的记录返回第三列的值。问题是我的2个时间戳记录之间有行,我还需要第3列值。

例如:

ID       Date     In     Out     Color    Location
====     ====     ==     ===     ====     ========
1        09/20    09:00  17:00   Black    Paris
2        09/21    09:00  NULL    Black    Paris
3        09/21    NULL   NULL    White    London
4        09/21    NULL   NULL    Red      London
5        09/21    NULL   20:00   Blue     London
6        09/22    09:00  NULL    Black    Paris
7        09/22    NULL   NULL    White    London
8        09/22    NULL   NULL    Red      Paris
9        09/22    NULL   17:00   Blue     London

在此示例中,我希望Color列的所有值都适用于跨越19:00的班次内的所有记录。因此,我只想在Color中为ID 2,3,4, and 5返回值,因为只有09/21上的班次越过19:00

1 个答案:

答案 0 :(得分:0)

您似乎需要填写inout次,NULL。您可以使用相关子查询执行此操作。

select t1.*
from (select t1.*,
             (select top 1 in
              from t t2
              where t2.in is not null and
                    t2.id <= t.id
              order by t2.id desc
             ) as RealIn,
             (select top 1 out
              from t t2
              where t2.out is not null and
                    t2.id >= t.id
              order by t2.id asc
             ) as RealOut
      from t t1
     ) t1
where '19:00' between RealIn and RealOut;