TableA
{
Id int PK
Projid varchar(20)   
}
TableB{
Id int PK
Projid varchar(20)  FK 
Content text
Addtime datetime 
}
两个表结构类似这样的,B表中的Projid在A表中一定存在,但在B表中不唯一,实际上B表中的projid是从A表中提取过去的。
比方说要写工程日志,那么先要列出工程信息列表,点击相应的工程名称,进入当前工程下的所有日志列表,现在要求我最近写过日志的工程,在工程列表上面应该靠前面。工程表相当于A表,日志表相当于B表。A表原纪录排序是:
Id Projid
1 Projid00001
2 Projid00002
3 Projid00003
现在对B表进行了添加记录操作
B表记录:
Id Projid Addtime
1 Projid00002 2010-9-1 18:20:20
2 Projid00003 2010-9-4 18:20:20
3 Projid00001 2010-9-4 12:20:20
4 Projid00003 2010-9-4 13:20:20
5 Projid00003 2010-9-4 15:20:20
6 Projid00003 2010-9-4 18:20:20OK现在再来打开A表记录顺序应该是这样子的
Id Projid
1 Projid00003
2 Projid00001
3 Projid00002
也就是说根据操作B表的记录添加时间,来对A表的记录列表进行排序 。
希望有做过的给个提示?

解决方案 »

  1.   

    select 
      id=row_number() over(order by getdate()),
      projectid
    from a
    join (select projectid,max(Addtime) as Addtime from b group by projectid) b
    on a.projectid=b.projectid
    order by b.Addtime desc
      

  2.   

    DECLARE @b TABLE(id INT,projid VARCHAR(15),addtime DATETIME)
    INSERT INTO @b(id,projid,addtime)
    select 1,'Projid00002','2010-9-1 18:20:20' union all
    select 2,'Projid00003','2010-9-4 18:20:20' union all
    select 3,'Projid00001','2010-9-4 12:20:20' union all
    select 4,'Projid00003','2010-9-4 13:20:20' union all
    select 5,'Projid00003','2010-9-4 15:20:20' union all
    select 6,'Projid00003','2010-9-4 18:20:20'SELECT DISTINCT b.projid,b.addtime FROM @b AS b WHERE b.projid NOT IN (SELECT bb.projid FROM @b AS bb WHERE b.projid = bb.projid AND b.addtime < bb.addtime) ORDER BY b.addtime DESC/*
    projid          addtime                                                
    --------------- ------------------------------------------------------ 
    Projid00003     2010-09-04 18:20:20.000
    Projid00001     2010-09-04 12:20:20.000
    Projid00002     2010-09-01 18:20:20.000(所影响的行数为 3 行)
    */