我正在使用Sybase 15。
我有一张看起来像这样的桌子
--------------------------------------------
Date | GroupId | Comment
--------------------------------------------
01/05/2012 1 ABC
01/05/2012 2 XYZ
02/05/2012 1 null
02/05/2012 2 null
03/05/2012 1 null
03/05/2012 2 null
04/05/2012 1 DEF
04/05/2012 2 GHI
05/05/2012 1 null
05/05/2012 2 null
06/05/2012 1 null
我正在寻找的输出如下。 如果注释字段为空/ null,请使用前一天的值(具有相同的GroupId)更新它
-----------------------------------------------
Date | GroupId | Comment
-----------------------------------------------
01/05/2012 1 ABC
01/05/2012 2 XYZ
02/05/2012 1 ABC
02/05/2012 2 XYZ
03/05/2012 1 ABC
03/05/2012 2 XYZ
04/05/2012 1 DEF
04/05/2012 2 GHI
05/05/2012 1 DEF
05/05/2012 2 GHI
06/05/2012 1 DEF
答案 0 :(得分:1)
这是一个棘手的问题,我认为Sybase不支持lag()
或outer apply
。您可以在子查询中查找所有早期的注释,然后使用non exists
子句要求中间没有注释。那应该找到之前的评论。
select Date
, GroupId
, case
when Comment is not null then Comment
else
(
select Comment
from YourTable yt2
where yt1.GroupId = yt2.GroupId
and yt2.Comment is not null
and yt2.Date < yt1.Date
and not exists
(
select *
from YourTable yt3
where yt1.GroupId = yt2.GroupId
and yt2.Comment is not null
and yt3.Date < yt2.Date and yt2.Date < yt1.Date
)
) end as Comment
from YourTable yt1