如何在视图中显示最近添加的细节中的字段?

时间:2011-04-08 21:16:35

标签: sql tsql sql-server-2008-r2

QUERY:

drop table #foot
create table #foot (
    id int primary key not null,
    name varchar(50) not null
)
go

drop table #note
create table #note (
    id int primary key not null,
    note varchar(MAX) not null,
    foot_id int not null references #foot(id)
)
go

insert into #foot values 
(1, 'Joe'), (2, 'Mike'), (3, 'Rob')
go

insert into #note (id, note, foot_id) values (1, 'Joe note 1', 1)
go
insert into #note (id, note, foot_id) values(2, 'Joe note 2', 1)
go
insert into #note (id, note, foot_id) values(3, 'Mike note 1', 2)
go

select F.name, N.note, N.id
from #foot F left outer join #note N on N.foot_id=F.id

结果:

enter image description here

问题:

如何为每个主记录(#foot)创建一个视图/查询,以及最近插入的详细信息(#note)中的字段(如果有)?

目标:

enter image description here

(注意:我告诉哪一个最新的方式是新记录的ID会更高)

2 个答案:

答案 0 :(得分:1)

select t.name, t.note, t.id
    from (select F.name, N.note, N.id,
                 ROW_NUMBER() over(partition by F.id order by N.id desc) as RowNum
              from #foot F 
                  left outer join #note N 
                      on N.foot_id=F.id) t
    where t.RowNum = 1

答案 1 :(得分:1)

假设在#note表中创建的ID总是增量的(通过使用IDENTITY或通过控制插入来总是按最大值递增),您可以使用以下查询(使用等级函数):

WITH Dat AS
(
    SELECT f.name, 
             n.note, 
             n.id,
             RANK() OVER(PARTITION BY n.foot_id ORDER BY n.id DESC) rn
    FROM #foot f LEFT OUTER JOIN #note n 
    ON n.foot_id = f.id  
)
SELECT *
  FROM Dat
    WHERE rn = 1