Utilizar o Penultimo e o Ultimo registros.

05/07/2011

Ola Boa tarde!!!   Para variar um pouco estou com problemas com um script que montei, eu preciso listar os itens que nao tiveram vendas em um determinado periodo em uma loja, e preciso que este item aparece com as datas da ultima e a penultima data de venda.   Ja pesquisei na net e achei algumas coisas muito estranhas e nenhuma funcionou.   o script que montei eh o seguinte:   SELECT S.CODSTK AS CODIGO, S.CODFAB AS CODFAB, S.MARCA AS MARCA, (SELECT TOP 1 CONVERT(VARCHAR(10),I.DATEMI,103) FROM LOJA1.DBO.ITEMVDA AS I WHERE I.CODSTK = S.CODSTK ORDER BY I.DATEMI DESC) AS PENULTIMO, (SELECT TOP 1 CONVERT(VARCHAR(10),I2.DATEMI,103) FROM LOJA1.DBO.ITEMVDA AS I2 WHERE I2.CODSTK = S.CODSTK ORDER BY I2.DATEMI DESC) AS ULTIMA FROM LOJA1.DBO.ITEMSTK AS S LEFT JOIN LOJA1.DBO.ITEMVDA AS I3 ON (I3.CODSTK = S.CODSTK) LEFT JOIN LOJA1.DBO.REQVDA AS R ON (R.SID = I3.SID) WHERE I3.DATEMI NOT BETWEEN '1.1.11' AND '30.6.11' AND R.TIPOREQ = 'VD' GROUP BY S.CODSTK,S.CODFAB,S.MARCA ORDER BY S.CODSTK,S.CODFAB,S.MARCA Eu coloquei utilizando top 1 nas duas para garantir a estrutura que eu quero, mas do jeito que esta esta apresentando sempre as mesmas datas, e o que preciso eh apresentar a ultima e a penultima data.   Me deem uma forca ai por favor.   obrigado.   Abraco.   Alex - Lekao        

Alex Lekao

Respostas

05/07/2011

Emerson

Ola Boa tarde!!!   Para variar um pouco estou com problemas com um script que montei, eu preciso listar os itens que nao tiveram vendas em um determinado periodo em uma loja, e preciso que este item aparece com as datas da ultima e a penultima data de venda.  

do que você precisa exatamente?
achei o enunciado um pouco estranho. você quer os itens que não venderam num período???

eu já vi pesquisas para saber se um produto está encalhado e a quanto tempo não vende, mas isso não implica num período e, sim, numa data limite. por exemplo: quais produtos estão parados há pelo menos 15 dias sem qualquer movimentação? ou: preciso fazer uma mega promoção com os produtos que estão há mais de 30 dias sem qualquer venda.

mas raramente num período... é para quê? para cálculo de sazonalidade?
Responder Citar

05/07/2011

Alex Lekao

Ola Emerson, boa tarde!!!   Obrigado mais uma vez pela sua colaboracao.   Entao o relatorio foi uma solicitacao do diretor aqui da empresa, ele ira informar uma quantidade de dias mesmo, eu utilizei o periodo no script para poder validar as datas que preciso apresentar, qua faz parte da solicitacao dele, a ultima e a penultima venda do produto, ja tenho outro relatorios que fiz onde mostram as quantidades de vendas do produtos, medias de vendas, etc, onde poderemos trabalhar com a sazonalidade do item.   O problema especificamente eh apresentar as duas ultimas datas do item, ultima e penultima data de venda.   Tentei usar algumas maneiras de fazer isso mas nenhuma das que tentei derei certo, pensei em fazer subselects mas nao consegui montar uma subselect usando top dentro da outra.   Como disse o periodo que utilizei no script foi so para validar as datas, o relatorio sera baseado em um parametro que o usuario ira informar em dias, por exemplo 90 dias, etc.   Fiz uma seria de pesquisas a respeito de como usar o penultimo, pq o ultimo ja esta no script de qqr forma.   Mais uma vez, obrigado pela sua ajuda.   Abraco.   Alex - Lekao
Responder Citar

05/07/2011

Emerson

tente com este:

SELECT
  *,
  (SELECT CONVERT(VARCHAR(10),COALESCE(MAX(I.DATEMI),'1.1.1900'),103)
   FROM LOJA1.DBO.ITEMVDA AS I
   INNER JOIN LOJA1.DBO.REQVDA AS R ON (R.SID = I.SID AND R.TIPOREQ = 'VD')
   WHERE I.CODSTK = TAB.CODIGO AND I.DATAEMI < TAB.ULTIMA) AS PENULTIMA
FROM
(SELECT
   S.CODSTK AS CODIGO,
   S.CODFAB AS CODFAB,
   S.MARCA AS MARCA,
   CONVERT(VARCHAR(10),COALESCE(MAX(I.DATEMI),'1.1.1900'),103) AS ULTIMA
 FROM
   LOJA1.DBO.ITEMSTK AS S
 LEFT JOIN
   LOJA1.DBO.ITEMVDA AS I ON (I.CODSTK = S.CODSTK)
 LEFT JOIN
   LOJA1.DBO.REQVDA AS R ON (R.SID = I.SID)
 WHERE
   AND R.TIPOREQ = 'VD'
 GROUP BY
   S.CODSTK,S.CODFAB,S.MARCA
 HAVING
   MAX(I.DATEMI) < GetDate() - nNumeroDeDias
) TAB
ORDER BY
  CODSTK, CODFAB, MARCA

creio que deve funcionar da forma que você precisa.






Responder Citar

06/07/2011

Alex Lekao

Ola Emerson, boa tarde!!!   Mais uma vez muito obrigado!!!   Pelo que conferi funcionou Certinho.   Agora vou so verificar o que consigo para usar apenas os registros de ultima venda e penultiva venda para um outro relatorio que estou montando, onde sera impresso todos os itens do estoque informando as duas ultimas vendas.   Mais uma vez, obrigado!!!   Abraco.   Alex - Lekao
Responder Citar