如果您有一个表,其中包含来自另一个表的历史记录(更新,删除),那么如果在删除操作之后出现相关更新行,您将如何提取?
表格包含以下与数据无关的栏目
ID int, - 身份
OP varchar - 编码为“D”或“U”的删除或更新操作
Removed_Date - 从“实时”表格中删除行的日期
我尝试过这样的事情
选择*
从历史表中作为表1
将historytable作为table2加入table1.Removed_Date,如table2.Removed_Date
导致表中一行的多行(十个或更多)重复。
答案 0 :(得分:0)
如果你完全确定删除和相应更新的时间戳是相同的,你可以这样做:
select *
from historytable as table1
inner join historytable as table2 on table1.Removed_Date = table2.Removed_Date
where table1.OP = 'D'
and table2.op = 'U'
如果时间戳不相同,并且您没有其他方法可以确定哪个UPDATE遵循哪个DELETE,那么您可以做的就是在DELETE之后检索第一个UPDATE。
select t1.*,
(select top 1 id
from historytable t2
where t2.Removed_Date > t1.Removed_Date
and t2.code = 'U')
from historytable t1 where code = 'D'
-Edoode
答案 1 :(得分:0)
以下是我最终在Perl中所做的事情:
while(<>){
@cols = split(/,/);
$ removeby = $ cols [3];
if($ cols [1] eq“D”和$ removeby!〜/ ottr | hksys /){
if($ hold){
@oldCols = split(/,/,$ hold);
$ oldRemoveBy = $ oldCols [3];
if($ removeby eq $ oldRemoveBy){
print $ hold;
打印;
}
$ hold =“”;
}
$ hold =“”;
其他{
$ hold = $ _;
}
}
这不是一个万无一失的解决方案,但似乎有效。