none
Seleção de últimas inserções RRS feed

  • Pergunta

  • Bom dia pessoal !

    Num outro tópico, coloquei a necessidade de trazer os últimos registros de determinados lançamentos.
    É +/- assim...preciso do último registro de entrada de um item para realizar o cálculo de custo do frete.
    O amigo Jean me ajudou com um script que de início parecia que estava correto, porém, para alguns itens, não deu certo.
    Mas notei algumas coisas e preciso de ajuda para entender o porque...segue abaixo o script que estou utilizando:

    SELECT I.ITEMID ITEM, I.INVOICEID NF, I.TRANSREFID OC, RECENTES.FINALIDADE FINALIDADE,
    convert(decimal(10,2),I.COSTAMOUNTPOSTED/RECENTES.QTD) VALOR_RATEADO
    FROM INVENTTRANS I INNER JOIN
    (SELECT MAX(PL.PURCHID) AS PURCHID, PL.ITEMID AS ITEMID, PL.DATAAREAID,SUM(PL.QTYORDERED)QTD, PL.DIMENSION3_ FINALIDADE  
    FROM PURCHLINE PL GROUP BY  PL.ITEMID,  PL.DATAAREAID, PL.DIMENSION3_) RECENTES ON 
    I.ITEMID = RECENTES.ITEMID AND I.TRANSREFID = RECENTES.PURCHID AND I.DATAAREAID = RECENTES.DATAAREAID
    WHERE
    I.QTY = 0
    AND RECENTES.QTD > 0
    AND I.TRANSREFID NOT LIKE 'EST%'
    AND I.ITEMID = '002166'
    group by  I.TRANSREFID, I.ITEMID, I.INVOICEID, I.DATAAREAID, I.COSTAMOUNTPOSTED, RECENTES.FINALIDADE, RECENTES.QTD
    ORDER BY 3

    Com este script não consigo trazer as últimas transações de todas as lojas, trago a maioria, mas ainda faltam alguns...
    Se eu colocar no Group By a coluna PL.PURCHID, ele traz as que faltam, mas aí não somente as últimas transações.
    Ele deveria trazer 32 linhas (32 filiais)...quando não agrupo PL.PURCHID ele traz 21 linhas, se eu agrupo, ele traz 1310.

    O que será que posso fazer ?

    Abaixo, uma imagem de 2 itens que testo para efeito de comparação...na mesma ordem de compra, o item 002166 não vem no script quando não agrupo, mas o item 001089 traz.

    quinta-feira, 10 de julho de 2014 12:31

Respostas

  • Pedro, consegui o resultado utilizando o script abaixo:

    SELECT 
    DISTINCT P.ITEMID, 
    RECENTES.OC, 
    RECENTES.DIMENSION3_
    ,	(SELECT SUM(P2.QTYORDERED) 
    	 FROM PURCHLINE P2 
    	 WHERE P2.ITEMID = RECENTES.ITEMID 
    	 AND P2.PURCHID = RECENTES.OC 
    	 AND P2.DIMENSION3_ = RECENTES.DIMENSION3_) QTD
    ,		(SELECT SUM(I.COSTAMOUNTPOSTED) 
    		 FROM INVENTTRANS I 
    		 WHERE I.QTY = 0 
    		 AND I.ITEMID = RECENTES.ITEMID 
    		 AND I.TRANSREFID = RECENTES.OC) VALOR
    FROM PURCHLINE P 
    INNER JOIN 
    			(SELECT MAX(PL.PURCHID) AS OC, PL.ITEMID, PL.DIMENSION3_
    			 FROM PURCHLINE PL WHERE PL.PURCHSTATUS = '3' 
    AND EXISTS 
    				(SELECT TOP 1 1 FROM INVENTTRANS I2
    				 WHERE I2.ITEMID = PL.ITEMID
    				 AND I2.QTY = 0
    				 AND I2.TRANSREFID = PL.PURCHID)
    GROUP BY PL.ITEMID, PL.DIMENSION3_)RECENTES 
    ON P.ITEMID = RECENTES.ITEMID
    WHERE
    P.QTYORDERED > 0
    ORDER BY 3


    • Marcado como Resposta matfurrier quinta-feira, 17 de julho de 2014 13:32
    quinta-feira, 17 de julho de 2014 13:31

Todas as Respostas

  • Matfurrier,

    Você já analisou o comando Where e demais operadores que você esta utilizando como Filtro na sua query?

    O Where esta sendo aplicado ao seu Select, com base, Inner Join e Select From que esta sendo processado.

    Processando de forma separada da query e respeitando os filtros aplicados no Where qual é o resutaldo?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 16 de julho de 2014 18:04
  • Pedro, consegui o resultado utilizando o script abaixo:

    SELECT 
    DISTINCT P.ITEMID, 
    RECENTES.OC, 
    RECENTES.DIMENSION3_
    ,	(SELECT SUM(P2.QTYORDERED) 
    	 FROM PURCHLINE P2 
    	 WHERE P2.ITEMID = RECENTES.ITEMID 
    	 AND P2.PURCHID = RECENTES.OC 
    	 AND P2.DIMENSION3_ = RECENTES.DIMENSION3_) QTD
    ,		(SELECT SUM(I.COSTAMOUNTPOSTED) 
    		 FROM INVENTTRANS I 
    		 WHERE I.QTY = 0 
    		 AND I.ITEMID = RECENTES.ITEMID 
    		 AND I.TRANSREFID = RECENTES.OC) VALOR
    FROM PURCHLINE P 
    INNER JOIN 
    			(SELECT MAX(PL.PURCHID) AS OC, PL.ITEMID, PL.DIMENSION3_
    			 FROM PURCHLINE PL WHERE PL.PURCHSTATUS = '3' 
    AND EXISTS 
    				(SELECT TOP 1 1 FROM INVENTTRANS I2
    				 WHERE I2.ITEMID = PL.ITEMID
    				 AND I2.QTY = 0
    				 AND I2.TRANSREFID = PL.PURCHID)
    GROUP BY PL.ITEMID, PL.DIMENSION3_)RECENTES 
    ON P.ITEMID = RECENTES.ITEMID
    WHERE
    P.QTYORDERED > 0
    ORDER BY 3


    • Marcado como Resposta matfurrier quinta-feira, 17 de julho de 2014 13:32
    quinta-feira, 17 de julho de 2014 13:31