Sql 为表中的元组选择最大值
我有一张这样的桌子:Sql 为表中的元组选择最大值,sql,sqlite,subquery,max,greatest-n-per-group,Sql,Sqlite,Subquery,Max,Greatest N Per Group,我有一张这样的桌子: host, job, folder, file, mtime Select (host, folder) pair where tuple (host, job, folder) max(max (file mtime)) 文件夹名称不是唯一的,对于分布在不同主机上的作业,文件夹名称可以相同。我需要选择最大值(文件的mtime)是不同主机上相同名称的所有文件夹的最大值的文件夹。大概我需要这样的东西: host, job, folder, file, mtime Sel
host, job, folder, file, mtime
Select (host, folder) pair where tuple (host, job, folder) max(max (file mtime))
文件夹名称不是唯一的,对于分布在不同主机上的作业,文件夹名称可以相同。我需要选择最大值(文件的mtime)是不同主机上相同名称的所有文件夹的最大值的文件夹。大概我需要这样的东西:
host, job, folder, file, 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
桌子很大,所以我想找出最好的方法。谢谢您可以使用子查询进行筛选:
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
)
关于性能,考虑一个索引>代码>(文件夹、作业、MTIME)< /代码> ./P>
您没有指定要如何处理潜在的顶部关系(与最大
mtime
的相同文件夹和作业相关的行):此查询将返回它们。您可以使用子查询进行筛选:
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
)
关于性能,考虑一个索引>代码>(文件夹、作业、MTIME)< /代码> ./P>
您没有指定要如何处理潜在的顶部关系(与最大mtime
的相同文件夹和作业相关的行),此查询会返回它们。类似行号()的窗口函数应能提供最佳性能:
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
请参阅。
结果:
类似于ROW\u NUMBER()
的窗口函数应提供最佳性能:
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
请参阅。
结果:
MySQL还是SQLite?请仅标记您正在使用的一个数据库。它实际上是Sqlite。为多个标签道歉@GMBMySQL还是SQLite?请仅标记您正在使用的一个数据库。它实际上是Sqlite。为多个标签道歉@如果我在这个问题上不清楚的话,我很抱歉。我首先需要选择任何给定文件夹中文件的最大时间。现在对于相同的(作业、文件夹)对,我需要找到与max of max mtimes(以前找到)对应的行。@Maxsteel:好的。我相应地更改了查询(这仍然是相同的逻辑,但在correlation子句中有两列)。如果我在问题中不清楚,很抱歉。我首先需要选择任何给定文件夹中文件的max mtime。现在是相同的(作业,文件夹)对,我需要找到与max of max mtimes(以前找到过)对应的行。@Maxsteel:好。我相应地更改了查询(这仍然是相同的逻辑,但在correlation子句中有两列)。