我的表格结构如下:
a | b
2014-04-12| 3
2014-03-12| 3
2014-02-12| 3
2014-05-12| 4
2014-03-12| 4
2014-04-12| 4
我需要输出a小于特定max(a)
的{{1}},a小于b
。
到目前为止,我所做的是在now()
a < now()
并且输出正确但查询的成本非常高,因为我的表中的行数非常大。有没有其他方法可以做到这一点。
我的查询是:
table.a < max(table1.b)
答案 0 :(得分:4)
我认为这应该比自连接更快,因为只需要对表进行一次扫描:
select a,b
from (
select a,
b,
max(a) over (partition by b) as max_a
from the_table
where a < now()
)
where a < max_a;
如果条件a < now()
过滤掉许多行,则(a,b)
上的索引会有所帮助。如果仍然留下很多行,(b,a)
上的索引可能是加速找到给定的最大值的更好选择。但只有真实数据的执行计划才会显示