Sql 将1添加到符合certian复杂条件的行

Sql 将1添加到符合certian复杂条件的行,sql,tsql,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

我有几个表,我将它们合并到一个表中,如下所示:

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行移动到第二天,但前提是它的pKey和kID与最后一个G行相同。因此,在上面的例子中,我想取第4行,并将日期重置为2017年10月5日XX:XX:XX,因为它位于第2行之后,第2行有相同的pKey和kID

我意识到last和after是相对的结构,但希望这一切都有意义


我怎样才能实现这个目标。请注意,[Date]是一个字符串,因此可能需要进行转换。

我想这就是您想要的:

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)
                   );

这几乎是对您的逻辑的直接翻译。

使用适当的软件MySQL、Oracle、DB2。。。和版本,例如sql-server-2014。语法和特征的差异通常会影响答案。请注意,tsql缩小了选择范围,但没有指定数据库。我认为别名可能有问题。我用我的表名dbo.Volumes替换了t,它运行了,但没有受影响的行,我知道有几行符合条件。我试着在where子句中运行select语句,它说t.pkey、t.kid和t.date列无法绑定…这是预期的…您确定别名正确吗?更新:啊,使用where子句运行select语句,结果没有行,看起来我需要做一些调查。也许我把标准解释错了