获得另一个最大值

时间:2015-06-03 02:39:54

标签: sql firebird greatest-n-per-group

我需要获取字段的最大值,所以我在存储过程中使用了这个SQL

Select max(field_1) from mytable into :v_max1

但是我想要获得具有该最大值的另一个字段值,我可以编写另一个这样的SQL

Select field_2 from mytable where field_1 = :v_max1 into v_field2

但是我想问一下是否可以使用第一个语句获取field_2值,所以我只使用单个语句?

3 个答案:

答案 0 :(得分:4)

此查询将返回field_1等于MAX(field_1)

的所有记录
SELECT field_2 FROM mytable WHERE field_1 = (
    SELECT MAX(field_1) FROM mytable)

答案 1 :(得分:2)

你可以这样做一个查询

SELECT FIRST 1 field_1, field_2
  FROM yourtable
 ORDER BY field_1 DESC;

如果我记得很清楚,你应该按降序排列field_1,以便它能够很好地运作。

请注意,如果max(value_1)不唯一,则第二个查询可能会返回多行。此查询将只返回一行。

答案 2 :(得分:1)

我希望你计算最大值不是为了获得某些表中主键字段的下一个值? 这是非常常见的错误,如果是这样,请考虑使用生成器(序列),因为MAX()不能有效地组织增量值序列。 另外,请记住MAX()只能使用降序索引。

我的2美分:)

此致 Alexey Kovyazin IBSurgeon