Página 1 de 1

Consulta SQL - Dados Duplicados 1 - N

Enviado: Qua, 30 Out 2019 2:51 pm
por rohilario_
Galera, boa tarde!! :D :D

Estou tentando realizar uma consulta, onde eu tenho as colunas de NUMBONUS, NUMNOTA, DATA1 E DATA2, onde eu somo as duas datas e preciso que me retorne o NUMBONUS.

A problemática: Um NUMBONUS tem Várias Notas, e no meu SQL atual ele está me retornando o somatório das datas para cada NUMNOTA, quando ele deveria mostrar só um resultado para cada NUMBONUS.

Meu SQL atual:

Selecionar tudo

select NUMNOTA, NUMBONUS, TO_date((N.DTENT || ' '|| N.HORALANC ||':'|| N.MINUTOLANC), 'DD-MM-YYYY hh24:mi:ss'), N.DTWMS 
from pcnfent n 
where n.numbonus = 58536
Quem puder me ajudar, agradeço de verdade!!!

Re: Consulta SQL - Dados Duplicados 1 - N

Enviado: Qua, 30 Out 2019 5:32 pm
por dr_gori
O que significa "somar duas datas"?

Quanto é 10-fev-2019 + 5-dezembro-2010 ?
:roll:

Re: Consulta SQL - Dados Duplicados 1 - N

Enviado: Qui, 31 Out 2019 8:00 am
por rohilario_
dr_gori escreveu:O que significa "somar duas datas"?
Desculpa, na verdade é uma subtração, e é subtraído DATA e HORA, algo como 31/10/2019 12:54:59 - 30/10/2019 16:34:47, me retornando um valor fracionado em dias, que multiplicado por 60 ou 1440 me retorna valores em horas ou minutos, respectivamente.
Quanto é 10-fev-2019 + 5-dezembro-2010 ?
Algo como isto: -0,006643518518518518518518518518518518518519 (fração em dias)
Peguei essa dica, inclusive aqui no FORUM haha :D :D :D
:roll:
De toda forma, a problemática não é neste ponto, pois isso eu já estou conseguindo fazer perfeitamente.
O grande lance que está me travando, é o fato das duplicações. Ele deveria retornar somente um único número de bonus(NUMBONUS). o Where nesse SQL é só de exemplo mesmo, pois esta SQL sera uma SQL dinâmica futuramente.

CODIGO ATUALIZADO:

Selecionar tudo

select NUMNOTA, NUMBONUS, TO_date((N.DTENT || ' '|| N.HORALANC ||':'|| N.MINUTOLANC), 'DD-MM-YY hh24:mi:ss'), N.DTWMS, TO_date((N.DTENT || ' '|| N.HORALANC ||':'|| N.MINUTOLANC), 'DD-MM-YY hh24:mi:ss') - N.DTWMS AS resultado from pcnfent n where n.numbonus = 58130
Segue também print da consulta e o resultado.

dr_gori Obrigado pela atenção :wink:

Re: Consulta SQL - Dados Duplicados 1 - N

Enviado: Qui, 31 Out 2019 5:02 pm
por dr_gori
Pelo que eu to vendo, basta somar todas as linhas agrupadas por NUMBONUS.
Pra isso, você tira o campo NUMNOTA fora.
Algo assim:

Selecionar tudo

select n.NUMBONUS
, sum (TO_date((N.DTENT || ' '|| N.HORALANC ||':'|| N.MINUTOLANC), 'DD-MM-YY hh24:mi:ss') - N.DTWMS) AS resultado 
from pcnfent n 
where n.numbonus = 58130
group by n.numbonus
É isso ?

Re: Consulta SQL - Dados Duplicados 1 - N

Enviado: Sex, 01 Nov 2019 1:11 pm
por rohilario_
dr_gori, antes de mais nada, obrigado mais uma vez pela resposta.
Chegou perto, eu já havia tentado isso, mas ainda não está certo, pois usando o Group By ele soma os valores de cada linha..
Que neste caso são duas linhas pois tenho duas notas(NUMNOTA), onde o resultado das somas é uma de -0,00664335... e outra de -0,000393518... totalizando -0,00703703703703704 (aproximadamente) que foi o resultado da sua Query :( :(

Preciso que ele não some os resultados, independente da quantidade de notas, pois o que me interessa é o valor de uma única nota, podendo ser a da maior nota por exemplo.

Em anexo o resultado da sua Query

Obrigado pela resposta!!

Re: Consulta SQL - Dados Duplicados 1 - N

Enviado: Sex, 01 Nov 2019 5:35 pm
por dr_gori
Pode fazer assim então:

Selecionar tudo

select n.NUMBONUS, n.NUMNOTA
, TO_date((N.DTENT || ' '|| N.HORALANC ||':'|| N.MINUTOLANC), 'DD-MM-YY hh24:mi:ss') - N.DTWMS AS resultado
from pcnfent n
where n.numbonus = 58130
  and n.numnota = (select max(y.numnota) from pcnfent y where y.numbonus = n.numbonus)
group by n.numbonus
Assim ele pega só a nota de maior número.

Re: Consulta SQL - Dados Duplicados 1 - N

Enviado: Seg, 04 Nov 2019 3:18 pm
por rohilario_
dr_gori escreveu:Pode fazer assim então:

Selecionar tudo

select n.NUMBONUS, n.NUMNOTA
, TO_date((N.DTENT || ' '|| N.HORALANC ||':'|| N.MINUTOLANC), 'DD-MM-YY hh24:mi:ss') - N.DTWMS AS resultado
from pcnfent n
where n.numbonus = 58130
  and n.numnota = (select max(y.numnota) from pcnfent y where y.numbonus = n.numbonus)
group by n.numbonus
Assim ele pega só a nota de maior número.
Obrigadíssimo!! Eu só troquei o seu max pelo min, pois o max estava retornando o menor valor e o min estava retornando o maior valor!
Também retirei o groupby, pois com ele estava dando erro.

dr_gori, muito obrigado mesmo pela ajuda!