DÚVIDA EM CASE

3SLUIS 07/06/2024 10:56:04
#503353

CASE WHEN (SELECT TOP 1 Data FROM HISTORICO WHERE CodHist = S.Codigo) > '2024-06-01' THEN
(faz um calculo)
ELSE
0
END


o código acima faz parte de uma procedure que trata alguns mils registros todo dia e foi colocado esse case para fazer o calculo apenas dos registros onde a primeira data do histórico seja maior que 01/06/24, existe alguma chance de passar batido?
pois teve um registro onde a data top 1 era 2024-04-17, nesse código ele não poderia fazer o cálculo, teria que retornar 0 (zero), porem ele passou.

caso 2024-04-17 > 2024-06-01
faça o calculo
senão
0
fim

da forma que está tem brecha para isso?
SAMUKA 08/06/2024 08:58:13
#503354
Bom dia 3SLUIS,

Em se tratando de comparar datas, aconselho a formatar a data, para que tenha certeza de estar comparando com formatos iguais.
FORMAT, CAST, CONVERT ... são algum das funções do SQL que podem te ajudar a garantir o mesmo formato.

OCELOT 12/06/2024 10:31:05
#503357
Alterado em 12/06/2024 10:31:40
SELECT TOP 1 Data FROM HISTORICO WHERE CodHist = S.Codigo
Esse SELECT não garante ordem, então a menor data até pode ser 2024-04-17 mas o primeiro registro retornado pode ser outro, tente ordenar os dados pela data

SELECT TOP 1 Data FROM HISTORICO WHERE CodHist = S.Codigo ORDER BY Data
Ou em vez do TOP 1 use a função agragada MIN

SELECT MIN(Data) FROM HISTORICO WHERE CodHist = S.Codigo
Faça seu login para responder