以下是代码段。 只是我添加的设计目的。
此处将为用户分配多个组。
所以我想单独选择人员细节。
此处人员ID 103 对同一产品有两种不同的延迟。 但只有为此人选择更高的许可。 但如果他没有被分配到多个组,则应选择默认权限。
示例数据
ProdId PersonId GroupId Permission
10103 78 55 15
10103 99 33 15
10103 100 33 0
10103 103 33 15
10103 103 40 0
10103 112 33 15

结果数据应为
ProdId PersonId Permission
10103 78 15
10103 99 15
10103 100 0
10103 103 15
10103 112 15

答案 0 :(得分:1)
您应该使用ROW_NUMBER()
:
SELECT * FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.prodid,t.personID ORDER BY t.permission DESC) as rnk
FROM YourTable t) s
WHERE s.rnk = 1
我认为你想要permission
上的最高数字?如果没有,请将ORDER BY
子句更改为您想要的内容。
现在它将选择所有列,指定您想要的列。
答案 1 :(得分:0)
如果您使用的是Oracle,请尝试以下查询..
select * from (
select ProdID, PersonID, Permission, row_number() over (partition by PersonID order by Permission Desc) as column1 from table1)
where column1 = 1;