我有一个表存储指定用户权限的字符串。我有一个列previous
,在同一个表中有一个FK到id
,这样就可以链接到以前版本的权限。我想要做的是创建一个只显示该链的最后一个(最新的链)的视图。原始的没有任何先前的值集。表格看起来像这样:
+-------+-------+------+----------+---------+
| 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 |
依旧......
我想从视图中得到的只是John的set5,Dave的set6和Phil的set4。谷歌搜索并没有带来任何有用的东西,令人惊讶......
提前感谢您的帮助!
答案 0 :(得分:0)
您可以按版本字段
执行此操作select *
from table as T
where version =
( select max(version)
from table
where User = T.User )
答案 1 :(得分: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
答案 2 :(得分:0)
这很有用。它基本上将用户所属的权限分组,对每行进行编号,然后仅选择rk = 1的权限。
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