在where子句中使用子查询来查找第二个最小值

时间:2019-05-17 13:47:58

标签: sql

我正在尝试查找列表的第二个最小值以将其放入SSRS中,以突出显示该值。此问题是给定元素有多个最小值。呈现数据的目的是要有一个包含较小组B的总体组A,而我想要每个较小组的第二个最小值。

我现在设置了一个查询,该查询在where子句中使用子查询从搜索中排除最小值,以便第二个最小值将被视为新的最小值。这似乎可行,但是子查询仅排除了较大A组的最小值,该最小值可能是也可能不是每个B组的最小值。这是我的查询:

Select
BPosition,
Min(Value) as SecondMinimum
From Table
Where Value > (Select
               Min(Value)
               From Table
               Where APosition = @AName)
      and APosition = @AName
Group By BPosition

我期待每个B组的第二个最小值列表,但它拉入每个B组中的最小值,该最小值大于A组的最小值。对于包含真正最小值的一个B组来说,这是正确的,而对于其他B组来说,是错误的。

1 个答案:

答案 0 :(得分:0)

如果要第二大的值,请使用dense_rank()

Select distinct BPosition, Value as SecondMinimum
From (select t.*,
             dense_rank() over (partition by Aposition, Bposition order by value) as seqnum
      from table
     ) t
where seqnum = 2;