我有一个名为“level”的数据库,它存储从1开始递增的整数。
我想运行一个select语句(也有各种其他条件)来检索每个“级别”的第一个和最后一个行,即每个级别的边界。但我有数以千万计的记录,所以希望以最有效的方式做到这一点。
有什么建议吗?
答案 0 :(得分:0)
我将调用确定第一个和最后一个something
的变量。我想这是一个时间戳,但你没有告诉我们。
如果您需要该行中的一列,则
SELECT level, MAX(something) as maxie, MIN(something) as minnie
FROM mytable
GROUP BY level;
如果您想要整行,请确保使用具有窗口函数的数据库
SELECT DISTINCT first_value(mytable) over www, last_value(mytable) over www
FROM mytable
WINDOW www as (partition by level order by level, something
RANGE BETWEEN unbounded preceding AND unbounded following);
如果这些太慢,可能会基于level
和something
的明智索引而成为噱头。我还在学习窗口,这是Postgres 9的新功能,但多年来一直在Oracle中。 (它不在MySQL中;你可能需要获得极值的PK并进行连接。)