表"文件"看起来如下:
File (
id (varchar);
size (double);
status (varchar);
timestamp (date);
)
我想制定一个SQL查询,确定具有该时间戳和早期时间戳的所有文件的最早日期(时间戳):
总大小超过某个默认值
状态等于"已处理"
类似的东西:
select MIN(timestamp)
from File
where status = "processed"
and SUM(size) > 1456,98
问题在于这部分是运算符SUM
,它应该应用于所有文件的大小,其时间戳等于或早于此查询应该实际返回的时间戳。
是否可以进行这样的SQL查询?
答案 0 :(得分:1)
在ANSI标准SQL中,您将使用窗口函数:
select min(timestamp)
from (select t.*,
sum(size) over (order by timestamp) as cumesize
from files f
) f
where cumsize > 1456.98 and
status = 'processed';
注意:这会计算所有文件的大小。如果您想要仅处理文件的大小总和,则将状态条件移动到子查询。
答案 1 :(得分:0)
如果你的dbms不支持窗口函数:
select MIN(timestamp)
from File f1
where status = "processed"
and (select SUM(size)
from File f2
where f2.timestamp <= f1.timestamp
and status = "processed") > 1456,98