Cautare a n-a cea mai mica\mare valoare

Rezolvare problema (Fix IT)

Situatie

Uneori avem nevoie sa cautam intr-o coloana de timp integer / numeric / decimal   maximul sau minimul valorii din acea coloana. Solutia este simpla in acest caz, pentru ca vom scrie un query ca acesta:

select min(Coloana) from tabela

sau

select max(Coloana) from tabela

dupa caz.

Dar ce ne facem daca avem nevoie sa gasim a doua valoare ca marime, sau a treia, etc ?

Solutie

Pentru cazurile in care suntem nevoiti sa cautam a n-a cea mai mica sau mai mare valoare dintr-o coloana, am creat scriptul de mai jos in care:

  • in variabila @tabela o sa puneti numele tabelei voastre.
  • in variabila @coloana o sa puneti numele coloanei (evident, din tabela de mai sus) in care aveti nevoie sa cautati valoarea respectiva.
  • in variabila @MinSauMax o sa puneti 0 in cazul in care vreti sa cautati a n-a valoare cea mai mica sau 1 in cazul in care vreti sa cautati a n-a valoare cea mai mare
  • in variabila @Nvalue o sa puneti valoarea lui n din a n-a valoare cautata

EXEMPLU:  daca vreti sa cautati a 5-a cea mai mare valoare, atunci @MinSauMax = 1 si @Nvalue = 5

declare @tabela varchar(max)
declare @coloana varchar(max)
declare @MinSauMax bit
declare @Nvalue int
declare @sql varchar(max)
declare @count bigint

set @tabela = ‘tabela
set @coloana = ‘coloana
set @MinSauMax = 0
set @Nvalue = 5

 

if @MinSauMax = 0

begin
set @sql = ‘select max(‘+(@coloana)+’) from (select TOP ‘+convert(varchar(max),@Nvalue)+’ ‘+@coloana+’ from ‘+@tabela+’ order by ‘+@coloana+’ asc) a’
print @sql
exec (@sql)
end

 

if @MinSauMax = 1

begin
set @sql = ‘select min(‘+(@coloana)+’) from (select TOP ‘+convert(varchar(max),@Nvalue)+’ ‘+@coloana+’ from       ‘+@tabela+’ order by ‘+@coloana+’ desc) a’
print @sql
exec (@sql)
end

Tip solutie

Permanent
Etichetare:

Voteaza

(23 din 53 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?