Fórum SQL Buscar ultima data #597440
27/09/2018
0
Boa tarde pessoal
Possuo as informações conforme tabela abaixo:
DATA ESTOQUE ID
20180927 149,000 1304
20180926 149,000 1304
20180925 151,000 1304
20180924 152,000 1304
20180923 155,000 1304
Preciso pegar a primeira data onde o estoque for menor que o do dia anterior e caso não seja cravar a ultima data onde o estoque era. No caso acima seria pegar a data do dia 20180925.
Inicialmente tento com CASE WHEN mas só consigo trazer quando o estoque de hoje é menor que o de ontem, quando é igual ao de ontem não consigo buscar a data de dias para trás
Vocês podem me auxiliar?
Possuo as informações conforme tabela abaixo:
DATA ESTOQUE ID
20180927 149,000 1304
20180926 149,000 1304
20180925 151,000 1304
20180924 152,000 1304
20180923 155,000 1304
Preciso pegar a primeira data onde o estoque for menor que o do dia anterior e caso não seja cravar a ultima data onde o estoque era. No caso acima seria pegar a data do dia 20180925.
Inicialmente tento com CASE WHEN mas só consigo trazer quando o estoque de hoje é menor que o de ontem, quando é igual ao de ontem não consigo buscar a data de dias para trás
Vocês podem me auxiliar?
Cassio
Curtir tópico
+ 0
Responder
Post mais votado
27/09/2018
Poderia ser algo assim?
Pelo que entendi a primeira data onde o estoque é menor que o do dia anterior, o resultado seria 20180924 e não 20180925
SELECT MIN(PERIODO)
FROM (SELECT TO_DATE(A.DT_PERIODO, 'YYYYMMDD') PERIODO,
A.ID_PRODUTO,
A.ESTOQUE,
LAG(TO_DATE(A.DT_PERIODO, 'YYYYMMDD'), 1) OVER(ORDER BY TO_DATE(A.DT_PERIODO, 'YYYYMMDD')) AS PERIODO_ANTERIOR,
LAG(A.ESTOQUE, 1) OVER(ORDER BY TO_DATE(A.DT_PERIODO, 'YYYYMMDD')) AS QT_PERIODO_ANTERIOR
FROM TB_TESTE A
ORDER BY 1 DESC) SUB
WHERE SUB.QT_PERIODO_ANTERIOR > SUB.ESTOQUE
Pelo que entendi a primeira data onde o estoque é menor que o do dia anterior, o resultado seria 20180924 e não 20180925
SELECT MIN(PERIODO)
FROM (SELECT TO_DATE(A.DT_PERIODO, 'YYYYMMDD') PERIODO,
A.ID_PRODUTO,
A.ESTOQUE,
LAG(TO_DATE(A.DT_PERIODO, 'YYYYMMDD'), 1) OVER(ORDER BY TO_DATE(A.DT_PERIODO, 'YYYYMMDD')) AS PERIODO_ANTERIOR,
LAG(A.ESTOQUE, 1) OVER(ORDER BY TO_DATE(A.DT_PERIODO, 'YYYYMMDD')) AS QT_PERIODO_ANTERIOR
FROM TB_TESTE A
ORDER BY 1 DESC) SUB
WHERE SUB.QT_PERIODO_ANTERIOR > SUB.ESTOQUE
Marcio Saraiva
Responder
Gostei + 2
Mais Posts
27/09/2018
Alex Lekao
Oi Cassio, boa tarde!!!
Vamos ver se consigo te ajudar.
Vc esta usando qual banco de dados?
Eu estou pensando em vc utilizar o Outer Apply, mas estou achando meio estranho a necessidade.
Não sei te ajudará, mas pensei em algo deste tipo, possivelmente não devo ter entendido bem o que vc precisa.
Qualquer coisa, vai colocando o que conseguiu ou compatilhe o codigo e resultado e vamos tentando te ajudar.
Atenciosamente,
Vamos ver se consigo te ajudar.
Vc esta usando qual banco de dados?
Eu estou pensando em vc utilizar o Outer Apply, mas estou achando meio estranho a necessidade.
SELECT
ID,
ESTOQUE,
DATA,
PRD2.ULTDT
FROM PRODUTOS AS P1
OUTER APPLY (SELECT
ID AS ID2,
ESTOQUE AS EST2,
DATA AS ULTDT
FROM PRODUTOS AS P2
WHERE P2.ID = P1.ID) AS PRD2
WHERE P1.ESTOQUE < PRD.ESTOQUE
Não sei te ajudará, mas pensei em algo deste tipo, possivelmente não devo ter entendido bem o que vc precisa.
Qualquer coisa, vai colocando o que conseguiu ou compatilhe o codigo e resultado e vamos tentando te ajudar.
Atenciosamente,
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)