我有几个表连接到一个表中,如下所示:
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]以字符串形式出现,因此可能需要进行转换。
答案 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)
);
它几乎是你逻辑的直接翻译。