2017-11-11 33 views
0

我有一個存儲指定用戶權限的字符串的表。我有一列previous,在同一個表中有一個FK到id,這種方式鏈接到以前版本的權限。我想要做的是創建一個視圖,只顯示最後一個鏈(最新的)。原來的一個沒有任何以前的值集。該表不是這個樣子的:SQL視圖只選擇自引用鏈的最後一個鏈接

+-------+-------+------+----------+---------+ 
| ID | PERMS | USER | PREVIOUS | VERSION | 
+-------+-------+------+----------+---------+ 
| GUID1 | set1 | John |   | 1  | 
| GUID2 | set2 | Dave |   | 1  | 
| GUID3 | set3 | John | GUID1 | 2  | 
| GUID4 | set4 | Phil |   | 1  | 
| GUID5 | set5 | John | GUID3 | 3  | 
| GUID6 | set6 | Dave | GUID2 | 2  | 

等等...

我想從視圖中獲得僅僅是約翰的SET5,Dave的set6和菲爾的SET4。谷歌搜索沒有帶來任何有用的,令人驚訝的...

在此先感謝您的幫助!

回答

0

你可以試試這個:

SELECT ID,PERMS,USERS,PREVIOUS,VERSION 
      FROM 
      (select ID,PERMS,USERS,PREVIOUS,VERSION, 
      ROW_NUMBER() OVER (PARTITION BY USERS ORDER BY VERSION DESC) rn 
      from Tab) A where rn=1 
0

你可以做到這一點的版本場

select * 
    from table as T 
where version = 
     (select max(version) 
      from table 
      where User = T.User) 
+0

採取

WITH summary AS ( SELECT p.id, p.perms, p.user, p.previous, ROW_NUMBER() OVER(PARTITION BY p.user ORDER BY p.version DESC) AS rk FROM dbo.permissions p) SELECT s.id, s.user, s.perms, s.previous FROM summary s WHERE s.rk = 1 

守則@vianov提到的,因爲在表不需要CTE是許可的最新版本號 – Sonikas