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
Leave A Comment?