有三个表  一个site表  一个 customer 表    一个SiteHistory表      主健分别是  iSiteID,  iCustomerID,  iSiteID 和datTimeStamp site表中记录的信息是不同的站点名称 
siteHistory中记录的是每当site表中某个站点设置更新就写一条新纪录,更新datTimeStamp为当前时间 
比如site 表中有 a,b,c三个站点的信息,  当把b更新名字成d的时候  site表中仍然是三条纪录a,c,d但是siteHistory中就会有四条记录a,b,c,d 
现在要做的是  当在网页上查找纪录是  dropdownlist中显示的是所有的站点名称从siteHistory表中得到a,b,c,d  如果customer 表中有 3个用户属于b站点 
在b站点改名字成d站点后又注册了2个新用户 
要求是  当选择b站点查找的时候只显示前三个用户  但是当用d站点查找的时候显示全部5个人    如果什么站点都不选现实全部的用户的时候  显示5个用户但是结果中的站点名称要求  前三个人显示 b(d)  后两个人显示(d)      如果需要可以在siteHistory表中增加column纪录某站点什么时候被remove换成新的站点了   哪位大侠帮忙看看 

解决方案 »

  1.   

    1.表结构描述不清:
      customer 表应该有注册时间:logindattimestamp
      sitehistory表中有:name
    2.建一个函数:返回通过ID和时间获取名称的函数。
      create function get_name(@id int,@time)
      returns varchar(20)
      as
      begin
        declare @n varchar(20)
        select top 1 @name =name from sitehistory where isiteid = @id and dattimestamp <=@time order by dattimestamp desc
        return @name 
      end
    3.这样你就可以通过时间和ID获取name了,后面的就不用说了吧
      

  2.   

    我来把问题叙述详细些   
    假设有三个表他们之间通过FK关联   Site表  SiteHistory表  Customer表    
    我只介绍一下表中重要的column   Site表中有 iSiteID, iSiteName, iSiteUrl,datCreateTime(创建时间)
    SiteHistory结构和Site完全一样  只不过多了一个datTimeStamp的column用来记录每一次对site表的更新
    Customer表中有 iCustomerID,iSiteID,datSignUpDate
    具体关系是
    iSiteID在Site表中是unique的用来做Primary Key
    iSiteHistory表中iSiteID和datTimeStamp用来做Primary Key,  同一个iSiteID在此表中可能对应多个记录 \
    iCustomerID在Customer表中是Unique的现在发生如下情况
    一开始在没有引用SiteHistory表的情况下 当查询Customer的时候很容易通过iSiteID把Customer和Site表关联查询得到相关的结果
    但是根据需要引入SiteHistory表后    需要得到以下查询
    假设Site和SiteHistory表中原先有三个站点记录
    iSiteID   iSiteName  iSiteUrl  datCreateTime
    1             a       a.com    06/01/2006
    2             b       a.com    06/01/2007
    3             c       c.com    06/01/2008
    iSiteID   iSiteName  iSiteUrl  datCreateTime  datTimeStamp
    1             a       a.com    06/01/2006      06/01/2006
    2             b       a.com    06/01/2007      06/01/2007
    3             c       c.com    06/01/2008      06/01/2008Customer表
    iCustomerID   iSiteID  datSignUpDate
    1               1        07/01/2006
    2               2        07/01/2007
    3               2        07/01/2007
    4               2        07/01/2007
    5               3        07/01/2008
    如果对Site表中b更新名字成d那么SiteHistory表中会增加一条记录
    2             d       d.com    06/01/2008      08/01/2008在此后原来的b站点也就是现在d站点又注册了两个新用户现在Customer表如下
    iCustomerID   iSiteID  datSignUpDate
    1               1        07/01/2006
    2               2        07/01/2007
    3               2        07/01/2007
    4               2        07/01/2007
    5               3        07/01/2008
    6               2        09/01/2008
    7               2        09/01/2008
        
    现在就有如下问题  假设在用户界面上有若干查询选择下拉列表框中显示SiteHistory中所有的不重复的站点(iSiteID可能相同)  
    用户选择b 需要显示的结果应该是
    iCustomerID    SiteName  datSignUpDate 
    2               b        07/01/2007
    3               b        07/01/2007
    4               b        07/01/2007如果选择 d 需要显示的结果是   因为以前的三个用户仍然存在他们也属于新的站点
    iCustomerID    SiteName  datSignUpDate 
    2               d        07/01/2007
    3               d        07/01/2007
    4               d        07/01/2007
    6               d        09/01/2008
    7               d        09/01/2008如果选择全部那么应该显示iCustomerID    SiteName  datSignUpDate 
    1               a        07/01/2006
    2               d(b)     07/01/2007
    3               d(b)     07/01/2007
    4               d(b)     07/01/2007
    5               c        07/01/2008
    6               d        09/01/2008
    7               d        09/01/2008
    总的来说就是  显示结果的时候  选以前的显示以前的  选现在的显示现在的   选全部的话就用相关的名字区分出来我写的办法比较复杂逻辑性不好,所以想请大家帮忙看看有什么好办法
      

  3.   

    我来把问题叙述详细些  
    假设有三个表他们之间通过FK关联  Site表  SiteHistory表  Customer表    
    我只介绍一下表中重要的column  Site表中有 iSiteID, iSiteName, iSiteUrl,datCreateTime(创建时间) 
    SiteHistory结构和Site完全一样  只不过多了一个datTimeStamp的column用来记录每一次对site表的更新 
    Customer表中有 iCustomerID,iSiteID,datSignUpDate 
    具体关系是 
    iSiteID在Site表中是unique的用来做Primary Key 
    iSiteHistory表中iSiteID和datTimeStamp用来做Primary Key,  同一个iSiteID在此表中可能对应多个记录 \ 
    iCustomerID在Customer表中是Unique的 现在发生如下情况 
    一开始在没有引用SiteHistory表的情况下 当查询Customer的时候很容易通过iSiteID把Customer和Site表关联查询得到相关的结果 
    但是根据需要引入SiteHistory表后    需要得到以下查询 
    假设Site和SiteHistory表中原先有三个站点记录 
    iSiteID  iSiteName  iSiteUrl  datCreateTime 
    1            a      a.com    06/01/2006 
    2            b      a.com    06/01/2007 
    3            c      c.com    06/01/2008 
    iSiteID  iSiteName  iSiteUrl  datCreateTime  datTimeStamp 
    1            a      a.com    06/01/2006      06/01/2006 
    2            b      a.com    06/01/2007      06/01/2007 
    3            c      c.com    06/01/2008      06/01/2008 Customer表 
    iCustomerID  iSiteID  datSignUpDate 
    1              1        07/01/2006 
    2              2        07/01/2007 
    3              2        07/01/2007 
    4              2        07/01/2007 
    5              3        07/01/2008 
    如果对Site表中b更新名字成d那么SiteHistory表中会增加一条记录 
    2            d      d.com    06/01/2008      08/01/2008 在此后原来的b站点也就是现在d站点又注册了两个新用户现在Customer表如下 
    iCustomerID  iSiteID  datSignUpDate 
    1              1        07/01/2006 
    2              2        07/01/2007 
    3              2        07/01/2007 
    4              2        07/01/2007 
    5              3        07/01/2008 
    6              2        09/01/2008 
    7              2        09/01/2008 
        
    现在就有如下问题  假设在用户界面上有若干查询选择下拉列表框中显示SiteHistory中所有的不重复的站点(iSiteID可能相同)  
    用户选择b 需要显示的结果应该是 
    iCustomerID    SiteName  datSignUpDate 
    2              b        07/01/2007 
    3              b        07/01/2007 
    4              b        07/01/2007 如果选择 d 需要显示的结果是  因为以前的三个用户仍然存在他们也属于新的站点 
    iCustomerID    SiteName  datSignUpDate 
    2              d        07/01/2007 
    3              d        07/01/2007 
    4              d        07/01/2007 
    6              d        09/01/2008 
    7              d        09/01/2008 如果选择全部那么应该显示 iCustomerID    SiteName  datSignUpDate 
    1              a        07/01/2006 
    2              d(b)    07/01/2007 
    3              d(b)    07/01/2007 
    4              d(b)    07/01/2007 
    5              c        07/01/2008 
    6              d        09/01/2008 
    7              d        09/01/2008 
    总的来说就是  显示结果的时候  选以前的显示以前的  选现在的显示现在的  选全部的话就用相关的名字区分出来 我写的办法比较复杂逻辑性不好,所以想请大家帮忙看看有什么好办法