Firebird SQL - Retornar o Maior Valor de Datas e Turno de coluna dDiferente
Olá pessoal, boa tarde.
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:
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?
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
Curtidas 0
Melhor post
Emerson Nascimento
10/02/2021
faltou a data no filtro....
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
GOSTEI 1
Mais Respostas
Emerson Nascimento
10/02/2021
deve ser algo assim:
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
GOSTEI 0
Eli Dias
10/02/2021
deve ser algo assim:
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.
GOSTEI 0
Eli Dias
10/02/2021
faltou a data no filtro....
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.
GOSTEI 0