id value
1 50
2 60
3 55
select max(value) from tablename;
Geralmente sabemos que teremos 60, mas preciso do próximo valor 55.
Como obtenho o valor 55 usando SQL?
id value
1 50
2 60
3 55
select max(value) from tablename;
Geralmente sabemos que teremos 60, mas preciso do próximo valor 55.
Como obtenho o valor 55 usando SQL?
Para obter o segundo maior valor distinto na tabela, você pode usar
Supondo que o valor mais alto ocorra apenas uma vez, outra maneira seria usar
OFFSET
(SQL Server 2012 ou posterior):Uma solução genérica pode ser como abaixo:
Aqui você também pode definir o intervalo como
RowNum >= 10 AND RowNum <= 20
. E fornecerá 10ª a 20ª linhas com todas as colunas necessárias.Você tem o truque superior usual, como:
Ou você também pode usar o CTE como:
Ou, se você usa a versão recente do SQLServer (>= 2012), a função lag .
vou fazer assim:
Você também pode usar a
ROW_NUMBER()
função de janela. Se você deseja obter a 2ª entrada quando ordenado pelo seu valor de destino, você pode fazer:Agora, se você quiser obter o segundo valor mais alto e tiver duplicatas, convém agrupar pela entrada de valor para obter apenas valores distintos.
Você deve poder modificar essa abordagem para incluir um
MIN(id)
na seleção interna se precisar saber o ID do primeiro registro com o segundo valor mais alto (supondo que você tenha um conjunto de dados com dois 60s e dois 55s)