一个表结构如下
ID UserCode Name Sex Age Work Tel SchoolAge BeginDate EndDate
1 GUID 张三 男 21 教师 11111111 大专 1993-11-12 1994-11-17
9 GUID 张三 男 21 教师 11111111 本科 1994-11-17 1998-11-27
14 GUID 张三 男 21 教师 21111111 学士 1998-11-27 2000-10-2
17 GUID 张三 男 21 教师 11111111 硕士 2001-10-2 2001-12-2
19 GUID 张三 男 21 教师 11111111 硕士 2000-10-2 2002-9-2
35 GUID 张三 男 21 教师 11111111 博士 2002-9-2 2002-9-10
47 GUID 张三 男 21 教师 33333333 博士 2002-9-2 9999-12-31
...
这是用于存放用户基本信息的表,这样的存储的目的是,在每次用户数据修改时都能保留原始数据,数据以链表的形式存储通过
BeginDate=EndDate关联,也就是说如果id为47的这条数据能找到与他BeginDate相等的EndDate并且UserCode=UserCode就视为该条数据是id47的前一条数据现在的问题是怎么循环(可能要用的循环吧)的获取id47的所有历史修改数据呢。这里还要排除不符合条件的数据如id为17的因为根本没有对应的BeginDate=EndDate
ID UserCode Name Sex Age Work Tel SchoolAge BeginDate EndDate
1 GUID 张三 男 21 教师 11111111 大专 1993-11-12 1994-11-17
9 GUID 张三 男 21 教师 11111111 本科 1994-11-17 1998-11-27
14 GUID 张三 男 21 教师 21111111 学士 1998-11-27 2000-10-2
17 GUID 张三 男 21 教师 11111111 硕士 2001-10-2 2001-12-2
19 GUID 张三 男 21 教师 11111111 硕士 2000-10-2 2002-9-2
35 GUID 张三 男 21 教师 11111111 博士 2002-9-2 2002-9-10
47 GUID 张三 男 21 教师 33333333 博士 2002-9-2 9999-12-31
...
这是用于存放用户基本信息的表,这样的存储的目的是,在每次用户数据修改时都能保留原始数据,数据以链表的形式存储通过
BeginDate=EndDate关联,也就是说如果id为47的这条数据能找到与他BeginDate相等的EndDate并且UserCode=UserCode就视为该条数据是id47的前一条数据现在的问题是怎么循环(可能要用的循环吧)的获取id47的所有历史修改数据呢。这里还要排除不符合条件的数据如id为17的因为根本没有对应的BeginDate=EndDate
然后新建一个表B,用来保存最新记录.
一行一行从表A中取出数据,把它当一个结点.(使用游标)
把有效的记录保存到表B中并从表A中删除.(insert ,delete)
这样循环完的话就是表B是可用的最新记录,而表A全是无效的记录.
FROM TABLE a
WHERE EXISTS
(SELECT * FROM TABLE b WHERE b.UserCode = a.UserCode AND b.fbegindate = a.fenddate) AND
(UserCode = '43AC0313-50A0-4F6C-A4DF-C67AD33ECFB1')
---------------------
其实这条语句就能打到目的,可是取没有办法获取第一条数据(也就是EndDate=9999-12-31),有没有人有有更好的办法啊