Sql server 从单独的表中按id元组分组的sql server最大记录值
有很多问题已经在问,如何做一个一般的最大值组由一些id。但我的具体情况有所不同 我拥有的是一个记录,其值链接到与该记录相关联的任何未知数量的概要文件。为了简单起见,在本例中,每个团队有2个配置文件,但实际示例可以有任何大小 根据这些记录,我试图创建一个排行榜,以显示每个独特团队形成的最大记录,即使团队多次获得相同的最大值,也应该只显示一个结果 在本例中,唯一的团队是1,2和2,3。 <编辑>:独特的团队形成意味着排行榜应该考虑所有的档案1, 2,作为一个独特的ID,是同一个独特的团队,如果有相同的团队可能已经多次形成不同的记录。 在本例中,团队1,2具有重复的最大记录值1,该值应忽略重复。 假设was有3个用户:Sql server 从单独的表中按id元组分组的sql server最大记录值,sql-server,max,Sql Server,Max,有很多问题已经在问,如何做一个一般的最大值组由一些id。但我的具体情况有所不同 我拥有的是一个记录,其值链接到与该记录相关联的任何未知数量的概要文件。为了简单起见,在本例中,每个团队有2个配置文件,但实际示例可以有任何大小 根据这些记录,我试图创建一个排行榜,以显示每个独特团队形成的最大记录,即使团队多次获得相同的最大值,也应该只显示一个结果 在本例中,唯一的团队是1,2和2,3。 :独特的团队形成意味着排行榜应该考虑所有的档案1, 2,作为一个独特的ID,是同一个独特的团队,如果有相同的团队可
Table: profile
profileId | name
1 | John
2 | James
3 | Mark
那么假设当前有以下记录:
Table: record
recordId | value
1 | 1
2 | 1
3 | 2
4 | 3
最后,每个记录由其成员描述的以下团队组成:
Table: member
recordId | profileId
1 | 1
1 | 2
2 | 1
2 | 2
3 | 2
3 | 3
4 | 3
4 | 2
最终输出应如下所示:
recordId | profileId1 | profileId2 | value
4 | 2 | 3 | 4
1 (or 2) | 1 | 2 | 0
到目前为止,如果组id是记录的一部分,我似乎是这样做的:
SELECT *
FROM (SELECT *,
ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY value DESC) N
FROM record
) M WHERE N = 1
这实际上是为了得到唯一的元组:
select max(r.value) as value, p1.profileId as p1, p2.profileId as p2
from record r
inner join profile p1 on p1.recordId = r.id
inner join profile p1 on p2.recordId = r.id
where p1.profileId < p2.profileId
group by p2.profileId, p2.profileId
但是,我不知道如何将其组合起来,以获得每个配置文件元组的最大记录
另外,第二个查询对于任何未知数量的配置文件都不是非常可伸缩的,如果有一种方法可以不根据配置文件的数量进行自连接,那将是一个额外的奖励
如果有人能帮我为SQL Server构建正确的查询,那就太棒了
谢谢 经过一系列的研究和反复试验,我得出了以下答案,解决了我的问题。此查询将给出两人团队排行榜中每个团队的最高分:
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY m1.profileId, m2.profileId, m3.profileId ORDER BY r.value DESC) N,
m1.profileId AS m1, m2.profileId AS m2, m3.profileId AS m3, r.value, r.id
FROM record r
INNER JOIN member m1 ON m1.recordId = r.id
INNER JOIN member m2 ON m2.recordId = r.id
WHERE m1.profileId < m2.profileId
) R
where N = 1
ORDER BY value DESC;
它的工作原理是运行一个分区,按团队对所有记录进行排名,然后只提取排名第一的记录。where m1.profileId