在SQL中设置范围边界

时间:2011-04-25 02:17:59

标签: sql

我有一个名为“level”的数据库,它存储从1开始递增的整数。

我想运行一个select语句(也有各种其他条件)来检索每个“级别”的第一个和最后一个行,即每个级别的边界。但我有数以千万计的记录,所以希望以最有效的方式做到这一点。

有什么建议吗?

1 个答案:

答案 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);

如果这些太慢,可能会基于levelsomething的明智索引而成为噱头。我还在学习窗口,这是Postgres 9的新功能,但多年来一直在Oracle中。 (它不在MySQL中;你可能需要获得极值的PK并进行连接。)