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
Posts
05/07/2011
Emerson Nascimento
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?
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
05/07/2011
Emerson Nascimento
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.
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