0

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

例如:

ID 日期 In Out 颜色 Location
==== ==== == === ==== ========
1 09/20 09:00 17:00 黑色巴黎
2 09/21 09:00 NULL 黑色巴黎
3 09/21 NULL NULL 白色伦敦
4 09/21 NULL NULL 红伦敦
5 09/21 NULL 20:00 蓝色伦敦
6 09/22 09:00 NULL 黑色巴黎
7 09/22 NULL NULL 白色伦敦
8 09/22 NULL NULL 红巴黎
9 09/22 NULL 17:00 蓝色伦敦

在这个例子中,我想要Color在一个班次中的所有记录的列的所有值交叉19:00。因此,我只想将ColorID 中的值返回为crossed2,3,4, and 5上的移位。09/2119:00

4

1 回答 1

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;
于 2013-11-07T02:11:19.373 回答