Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 2
            [id] => 485846
            [titulo] => Seleção de últimas inserções SQL
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-07-17 15:25:12
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 154369
            [status] => A
            [isExample] => 
            [NomeUsuario] => MATEUS FURRIER
            [Apelido] => 
            [Foto] => 
            [Conteudo] => Amigos,
consegui com o script assim:

[code]
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
[/code] ) )

Seleção de últimas inserções SQL

Mateus Furrier
   - 10 jul 2014

Olá pessoal !
Tenho 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.
Um amigo 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:
#Código

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 ?

Post mais votado

Mateus Furrier
   - 17 jul 2014

Amigos,
consegui com o script assim:

#Código

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

Joel Rodrigues
   - 10 jul 2014

Para testar,faça o seguinte:
1) Remova os filtros (cada um por vez) e veja se muda o resultado.
2) Verifique se a relação do inner join está sendo atendida por todos os registros.

Faabiianooc
   - 10 jul 2014

Aconselho a refazer a Query,
Anote todas as suas necessidades a serem atendidas, e com isso vá criando a sua query, até que se chegue no resultado esperado.
Talvez em uma unica não se resolva, pode ser necessário criar uma função, existe N possibilidades.

Mateus Furrier
   - 11 jul 2014

A imagem ilustra um pouco do problema....
Para a mesma ordem de compra, ele traz o item 001089, mas não traz o 002166.
Se eu agrupar o campo de nº da ordem de compra (purchid) ele traz, mas aí, não somente a última ordem....
Clique na imagem para abrir em uma nova janela

Alex Lekao
   - 17 jul 2014

Ola Boa tarde!!

Nao entendi muito bem.

como monto alguns selects para resultados diversos aqui na empresa que envolve produtos e requisicoes etc, etc.

Se quiser posso tentar ajudar no que for possivel, mas acho que sera mais facil se nos falarmos por skype por exemplo.

se quiser me manda um e-mail e vemos o que consigo te ajudar.

alex_linhares_es@yahoo.com.br

Abraco.

Joel Rodrigues
   - 18 jul 2014

Que bom que conseguiu. Obrigado pelo retorno e por compartilhar a solução encontrada.