在符合certian复杂标准的行中添加1

时间:2017-10-05 21:16:34

标签: sql tsql

我有几个表连接到一个表中,如下所示:

Date                         Amount        pKey    kID    Source
10/4/2017 11:00:01 AM        49.34         27      81     TT
10/4/2017 10:49:29 AM        23.11         26      89     TT
10/4/2017 11:45:20 AM        54.14         24      42     G
10/4/2017  2:20:10 PM        10.20         26      89     G

数据每天在不同时间进入源表。我想要做的是创建一个程序或什么东西,以便"移动"某些行。如果TT行在当天的最后一行G后进入,我想将TT行移动到第二天(但只有当它与最后一行G具有相同的pKey和kID时)。因此,在上面的例子中,我想取第4行,并将日期重置为10/5/2017 XX:XX:XX,因为它出现在第2行之后 - 它具有相同的pKey和kID。

我意识到"最后" """"是相对的结构,但希望这一切都有意义。

我如何实现这一目标。请注意,[Date]以字符串形式出现,因此可能需要进行转换。

1 个答案:

答案 0 :(得分:1)

我认为这可以满足您的需求:

update t
    set date = dateadd(day, 1, date)
    where t.source = 'TT' and
          t.date < (select max(t2.date)
                    from t t2
                    where t2.pkey = t.pkey and t2.kid = t.kid and
                          t2.source = 'G' and
                          cast(t.date as date) = cast(t2.date as date)
                   );

它几乎是你逻辑的直接翻译。