一个表结构如下
 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

解决方案 »

  1.   

    先根据begindate排序,生成一个表到表A
    然后新建一个表B,用来保存最新记录.
    一行一行从表A中取出数据,把它当一个结点.(使用游标)
    把有效的记录保存到表B中并从表A中删除.(insert ,delete)
    这样循环完的话就是表B是可用的最新记录,而表A全是无效的记录.
      

  2.   

    SELECT *
    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),有没有人有有更好的办法啊