我有一张表返回了许多第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
。
答案 0 :(得分:0)
您似乎需要填写in
和out
次,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;