SQL查询以选择每组具有最大值的每一行

标签 sql greatest-n-per-group

我是 SQL 的新手,这个让我很困惑。你能帮我解决这个问题吗?

我有以下 2 个表:

表 1:问题表

Id   | RunId | Value
---
1    | 1     | 10  
2    | 1     | 20  
3    | 1     | 30  
4    | 2     | 40  
5    | 2     | 50  
6    | 3     | 60 
7    | 4     | 70 
8    | 5     | 80 
9    | 6     | 90 

表 2:运行表

RunId     | EnvironmentId
---
1         | 1
2         | 3
3         | 1
4         | 2
5         | 4
6         | 2

我需要 IssueTable 行,这些行代表 RunTable 中按 EnvironmentId 分组的 Max RunId。我需要从表中得到的结果是:

预期结果:

Id   | RunId | Value | EnvironmentId
---
4    | 2     | 40    | 3
5    | 2     | 50    | 3
6    | 3     | 60    | 1
8    | 5     | 80    | 4
9    | 6     | 90    | 2

因此只有每个 EnvironmentId 的 RunTable 中具有最新/最高 RunId 的行。例如,对于“1”的 EnvironmentId,我只想要包含“3”的 RunId 的行,因为 RunTable 中 EnvironmentId“1”的最新 RunId 是“3”。同样,最近运行的 EnvironementId“2”是 RunId“6”

最佳答案

使用子查询从运行表中获取每个 environmentid 的最大 runid。将得到的结果加入到issuetable中,选择需要的列。

select i.id, i.runid, i.value, r.environmentid
from (select environmentid, max(runid) maxrunid
      from runtable 
      group by environmentid) r
join issuetable i on i.runid = r.maxrunid
order by i.runid, i.id

关于SQL查询以选择每组具有最大值的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38082747/

相关文章:

java - 'getRow()' 方法只允许在滚动游标上 SQLException 错误

php - 如何为Elasticsearch索引标准化的SQL数据库

MySQL PDO - 通过联接分组的表的最新行

MYSQL:从两列中选择最高的ID并排序

mysql - 如何在 mysql 查询中从每个组中选择多个项目?

sql - 如何查找平均出现次数 (Oracle)

sql - 如何在sql查询中选择前30个字符?

mysql - 不确定我是否正确地执行了 sql 查询

r - 查找每个组的最大值并返回另一列

mysql - Symfony - 获取最新的对话信息