2011-04-08 40 views
2

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)

回答

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 
+0

夥計,謝謝! :)你不知道我在擺弄子查詢的時候擺弄了多長時間 – 2011-04-08 21:30:21

1

假設創建的ID在#note表中總是增量的(通過使用IDENTITY或通過控制插入始終遞增by最大值),您可以使用以下查詢(使用rank函數):

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 
+0

謝謝。這也適用。 – 2011-04-08 21:37:40

相關問題