1

我使用的是 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
4

1 回答 1

1

这是一个棘手的问题,我假设 Sybase 不支持lag()or 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
于 2012-04-29T12:48:29.623 回答