Select table 中元组的最大值
Select max for a tuple in table
我有一个 table 看起来像这样:
host, job, folder, file, mtime
文件夹名称不是唯一的,对于分布在不同主机上的作业可以相同。我需要选择文件夹,其中最大(文件的 mtime)是不同主机上所有同名文件夹中的最大值。大致我需要这样的东西:
Select (host, folder) pair where tuple (host, job, folder) max(max (file mtime))
示例:
1, j1, f1, e1, 2
2, j1, f1, e2, 0
2, j1, f1, e9, 3
3, j1, f1, e3, 2
1, j2, f2, e4, 3
2, j2, f2, e5, 4
3, j2, f2, e6, 5
1, j3, f3, e7, 6
2, j3, f3, e8, 7
结果将是:
2, j1, f1, e9, 3
3, j2, f2, e6, 5
2, j3, f3, e8, 7
table 很大,所以我试图找出最好的方法来做到这一点。谢谢
您可以使用子查询进行过滤:
select t.*
from mytable t
where t.mtime = (
select max(t1.mtime) from mytable t1 where t1.folder = t.folder and t1.job = t.job
)
为了提高性能,请考虑 (folder, job, mtime)
上的索引。
您没有指定您希望如何处理潜在的顶级关系(与相同 folder
和 job
相关的行,最大值为 mtime
):此查询 return他们。
像 ROW_NUMBER()
这样的 window 函数应该提供最好的性能:
SELECT host, job, folder, file, mtime
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY folder, job ORDER BY mtime DESC) rn
FROM tablename
)
WHERE rn = 1
参见demo。
结果:
| host | job | folder | file | mtime |
| ---- | --- | ------ | ---- | ----- |
| 2 | j1 | f1 | e9 | 3 |
| 3 | j2 | f2 | e6 | 5 |
| 2 | j3 | f3 | e8 | 7 |
我有一个 table 看起来像这样:
host, job, folder, file, mtime
文件夹名称不是唯一的,对于分布在不同主机上的作业可以相同。我需要选择文件夹,其中最大(文件的 mtime)是不同主机上所有同名文件夹中的最大值。大致我需要这样的东西:
Select (host, folder) pair where tuple (host, job, folder) max(max (file mtime))
示例:
1, j1, f1, e1, 2
2, j1, f1, e2, 0
2, j1, f1, e9, 3
3, j1, f1, e3, 2
1, j2, f2, e4, 3
2, j2, f2, e5, 4
3, j2, f2, e6, 5
1, j3, f3, e7, 6
2, j3, f3, e8, 7
结果将是:
2, j1, f1, e9, 3
3, j2, f2, e6, 5
2, j3, f3, e8, 7
table 很大,所以我试图找出最好的方法来做到这一点。谢谢
您可以使用子查询进行过滤:
select t.*
from mytable t
where t.mtime = (
select max(t1.mtime) from mytable t1 where t1.folder = t.folder and t1.job = t.job
)
为了提高性能,请考虑 (folder, job, mtime)
上的索引。
您没有指定您希望如何处理潜在的顶级关系(与相同 folder
和 job
相关的行,最大值为 mtime
):此查询 return他们。
像 ROW_NUMBER()
这样的 window 函数应该提供最好的性能:
SELECT host, job, folder, file, mtime
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY folder, job ORDER BY mtime DESC) rn
FROM tablename
)
WHERE rn = 1
参见demo。
结果:
| host | job | folder | file | mtime |
| ---- | --- | ------ | ---- | ----- |
| 2 | j1 | f1 | e9 | 3 |
| 3 | j2 | f2 | e6 | 5 |
| 2 | j3 | f3 | e8 | 7 |