SQL Data Maxima e status

21/12/2022

0

SQL

Galera, bom dia !
estou com um dilema
tenho uma tabela historico aqui.

EX:
1 tabela

Data numero_entrega status
10-01 00000 a
11-01 11111 b
13-01 22222 c
14-01 11111 d
15-01 22222 a
16-01 22222 d
17-01 22222 a

eu preciso pegar realizar uma consulta para pegar os dados do ultimo dia
com o status D

ex:
Data numero_entrega status
16-01 22222 d


estou tentando isso de tudo, criar with fazer lefts e tudo mais mas nao consigo.
tentei com o Max mas ele pega o dia 17 e nao traz o status que preciso.
sem falar q tenho q fazer outros joins
Kelvincorrea

Kelvincorrea

Responder

Posts

21/12/2022

Emerson Nascimento

deve ser mais ou menos isto...
select
   t1.*
from
   tabela t1
where
   upper(t1.status) = 'D'
   and right(t1.data,2)+left(t1.data,2) =
      (select max(right(t2.data,2)+left(t2.data,2)) from tabela t2 where upper(t2.status) = t1.status)

ou apenas
select
   top 1 -- aqui depede do SGBDR: pode ser top, first, rowcount...
   *
from
   tabela
where
   upper(status) = 'D'
order by 
   right(data,2)+left(data,2) desc

Responder

23/12/2022

Arthur Heinrich

Galera, bom dia !
estou com um dilema
tenho uma tabela historico aqui.

EX:
1 tabela

Data numero_entrega status
10-01 00000 a
11-01 11111 b
13-01 22222 c
14-01 11111 d
15-01 22222 a
16-01 22222 d
17-01 22222 a

eu preciso pegar realizar uma consulta para pegar os dados do ultimo dia
com o status D

ex:
Data numero_entrega status
16-01 22222 d


estou tentando isso de tudo, criar with fazer lefts e tudo mais mas nao consigo.
tentei com o Max mas ele pega o dia 17 e nao traz o status que preciso.
sem falar q tenho q fazer outros joins


Tome cuidado sempre que for acessar tabelas com dados históricos, para que não gere um problema de planos de acesso ruim.

No seu exemplo, o último dia (17-01) não possui registros com status ''''d''''. Mas, no seu exemplo re resultado, o dado retornado é do último dia em que o status ''''d'''' aparece.

Para isso, você precisa de um índice pelas colunas (status, data), para que o plano de acesso seja eficiente:

select Data, numero_entrega, status
from tabela
where
Data = (select max(Data) from tabela where status = ''''d'''') and
status = ''''d''''
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar