Firebird SQL - Retornar o Maior Valor de Datas e Turno de coluna dDiferente
10/02/2021
0
Me desculpem desde já se talvez não seja o local mais adequado para postar esta minha dúvida, mas confesso que sou bem leigo no assunto, mas sempre que posso vejo os posts do pessoal aqui no devmedia. Preciso de uma ajuda, que está me matando, e espero que possam me auxiliar.
É até boba a pergunta mas, seria muito grato em ser ajudado.
Vamos lá.
Tenho uma simples tabela SQL que com um select me retornam 03 campos: preço de venda, data do movimento e turno da ocorrência.
Preciso que sejam gerados sempre no Select os 03 últimos valores para as colunas citadas, sendo sempre o preço de venda, através da maior data cadastrada e do maior turno, com algumas condições.
Até então eu utilizava:
SELECT FIRST 3 PRC_VEN_VISTA, MAX(DAT_MOVIMENTO), MAX(TURNO_ID) FROM PRECO_PRODUTO WHERE EMPRESA_ID=7783 AND PRODUTO_ID=105 AND DAT_MOVIMENTO between ''''11.01.2021'''' and ''''09.02.2021'''') // utilizo para me puxar os 30 dias anteriores os valores do combustível de id setada GROUP BY TURNO_ID, DAT_MOVIMENTO, PRC_VEN_VISTA ORDER BY DAT_MOVIMENTO DESC
Exemplo de tabela:
PRC_VEN_VISTA MAX MAX2
4,64 09/02/2021 01
4,79 09/02/2021 02
4,20 04/02/2021 01
4,81 30/01/2021 01
4,19 25/01/2021 02
4,05 24/01/2021 01
Consulta da Tabela:
PRC_VEN_VISTA MAX MAX2
4,64 09/02/2021 01
4,79 09/02/2021 02
4,20 04/02/2021 01
Meu SQL retona o maior valor de data, porém quando ocorre igual o caso acima, de duas datas iguais, eu gostaria que ele me retornasse o maior valor de data + maior valor do Turno.
Expectativa : 4,79 - 09/02/2021 - 02
PRC_VEN_VISTA MAX MAX2
4,79 09/02/2021 02
4,64 09/02/2021 01
4,20 04/02/2021 01
OBS: coloquei First 3, somente para acompanhamento, porém eu preciso somente que o resultado da minha tabela se ORDENE da MAIOR data e Turno Correspondente caso sejam datas repetidas.
Este caso funciona somente para datas distintas.
Poderiam me ajudar?
Eli Dias
Post mais votado
10/02/2021
SELECT PP.EMPRESA_ID, PP.PRODUTO_ID, PP.DAT_MOVIMENTO, PP.TURNO_ID, PP.PRC_VEN_VISTA FROM PRECO_PRODUTO PP INNER JOIN ( SELECT EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO, MAX(TURNO_ID) TURNO_ID FROM PRECO_PRODUTO WHERE EMPRESA_ID = 7783 AND PRODUTO_ID = 105 AND DAT_MOVIMENTO between '11.01.2021' and '09.02.2021' GROUP BY EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO ) FILTRO ON FILTRO.EMPRESA_ID = PP.EMPRESA_ID AND FILTRO.PRODUTO_ID = PP.PRODUTO_ID AND FILTRO.TURNO_ID = PP.TURNO_ID AND FILTRO.DAT_MOVIMENTO = PP.DAT_MOVIMENTO -- FALTOU ESTA CONDIÇÃO NO RELACIONAMENTO ORDER BY PP.DAT_MOVIMENTO DESC
Emerson Nascimento
Mais Posts
10/02/2021
Emerson Nascimento
SELECT PP.EMPRESA_ID, PP.PRODUTO_ID, PP.DAT_MOVIMENTO, PP.TURNO_ID, PP.PRC_VEN_VISTA FROM PRECO_PRODUTO PP INNER JOIN ( SELECT EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO, MAX(TURNO_ID) TURNO_ID FROM PRECO_PRODUTO WHERE EMPRESA_ID = 7783 AND PRODUTO_ID = 105 AND DAT_MOVIMENTO between '11.01.2021' and '09.02.2021' GROUP BY EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO ) FILTRO ON FILTRO.EMPRESA_ID = PP.EMPRESA_ID AND FILTRO.PRODUTO_ID = PP.PRODUTO_ID AND FILTRO.TURNO_ID = PP.TURNO_ID ORDER BY PP.DAT_MOVIMENTO DESC
10/02/2021
Eli Dias
SELECT PP.EMPRESA_ID, PP.PRODUTO_ID, PP.DAT_MOVIMENTO, PP.TURNO_ID, PP.PRC_VEN_VISTA FROM PRECO_PRODUTO PP INNER JOIN ( SELECT EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO, MAX(TURNO_ID) TURNO_ID FROM PRECO_PRODUTO WHERE EMPRESA_ID = 7783 AND PRODUTO_ID = 105 AND DAT_MOVIMENTO between '11.01.2021' and '09.02.2021' GROUP BY EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO ) FILTRO ON FILTRO.EMPRESA_ID = PP.EMPRESA_ID AND FILTRO.PRODUTO_ID = PP.PRODUTO_ID AND FILTRO.TURNO_ID = PP.TURNO_ID ORDER BY PP.DAT_MOVIMENTO DESC
Dede já muito obrigado pela ajuda.
Mas ainda assim, o resultado sai todos resultados de 09/02/2021, com valor de 4,64 e 4,74.
O que preciso é que saísse somente 4,74 de 09/02/2021.
10/02/2021
Eli Dias
SELECT PP.EMPRESA_ID, PP.PRODUTO_ID, PP.DAT_MOVIMENTO, PP.TURNO_ID, PP.PRC_VEN_VISTA FROM PRECO_PRODUTO PP INNER JOIN ( SELECT EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO, MAX(TURNO_ID) TURNO_ID FROM PRECO_PRODUTO WHERE EMPRESA_ID = 7783 AND PRODUTO_ID = 105 AND DAT_MOVIMENTO between '11.01.2021' and '09.02.2021' GROUP BY EMPRESA_ID, PRODUTO_ID, DAT_MOVIMENTO ) FILTRO ON FILTRO.EMPRESA_ID = PP.EMPRESA_ID AND FILTRO.PRODUTO_ID = PP.PRODUTO_ID AND FILTRO.TURNO_ID = PP.TURNO_ID AND FILTRO.DAT_MOVIMENTO = PP.DAT_MOVIMENTO -- FALTOU ESTA CONDIÇÃO NO RELACIONAMENTO ORDER BY PP.DAT_MOVIMENTO DESC
Rapaz, você é fantástico. Exatamente o que eu precisava.
Imensamente agradecido.
Agora me retornam os maiores entre datas se repetidas, com maior Turno igualmente.
Parabéns e muito Obrigado novamente.
Clique aqui para fazer login e interagir na Comunidade :)