Usuário com melhor resposta
Cosulta Sql 1º preço maior e 2º maior preço de venda do mesmo produto.

Pergunta
-
Bom dia gostaria uma ajuda pra fazer a seguinte consulta
Tabela de venda
VENDA
IDPRD
VALOR
DATA VENDA
31860
962
1600
2006-08-04 00:00:00.000
33153
962
1600
2006-09-01 00:00:00.000
67552
962
2051,68
2007-12-07 00:00:00.000
68322
962
2051,68
2007-12-07 00:00:00.000
73820
962
2051,68
2008-01-23 00:00:00.000
78142
962
2051,68
2008-04-11 00:00:00.000
95493
962
2189,77
2008-11-20 00:00:00.000
96365
962
2189,77
2008-11-20 00:00:00.000
Gostaria de buscar a venda que teve o maior preço e o segundo maior preço de modo que o resultado seria este:
78142
962
2051,68
2008-04-11 00:00:00.000
96365
962
2189,77
2008-11-20 00:00:00.000
Respostas
-
Bom dia Warlem,
Veja se o exemplo abaixo te ajuda.
Simulei o seu caso com os scripts abaixo e cheguei no resultado que você espera.
veja se te ajuda.
-- CRIA TABELA CREATE TABLE VENDA( VENDA VARCHAR(10), IDPRD INT, VALOR NUMERIC(15,2), DATA_DE_VENDA DATE); -- INSERE MASSA DE DADOS INSERT INTO VENDA VALUES('31860',962,1600,'2006-08-04'); INSERT INTO VENDA VALUES('33153',962,1600,'2006-09-01'); INSERT INTO VENDA VALUES('67552',962,2051.68,'2007-12-07'); INSERT INTO VENDA VALUES('68322',962,2051.68,'2007-12-07'); INSERT INTO VENDA VALUES('73820',962,2051.68,'2008-01-03'); INSERT INTO VENDA VALUES('78142',962,2051.68,'2008-04-11'); INSERT INTO VENDA VALUES('95493',962,2189.77,'2008-11-20'); INSERT INTO VENDA VALUES('96365',962,2189.77,'2008-11-20'); -- CTE PARA SELECT WITH CTE_REG_DPL AS( SELECT VENDA, IDPRD, VALOR, DATA_DE_VENDA, RANK() OVER(ORDER BY VALOR DESC, DATA_DE_VENDA DESC) AS ORDEM FROM VENDA ) SELECT TOP 2 max(VENDA),IDPRD,VALOR,DATA_DE_VENDA,ORDEM FROM CTE_REG_DPL GROUP BY IDPRD,VALOR,DATA_DE_VENDA,ORDEM ORDER BY ORDEM;
Att,
Adriano
Todas as Respostas
-
-
Obrigado Rodrigo por responder tao prontamente.
mas acho que minha pergunta ficou meio que confusa...
Eu preciso que a query retorne o primeiro e o segundo preço maior das vendas ...
o TOP nao atende pois o mesmo traz as primeiras colunas de uma consulta Ou a ultimas dependendo se vc usar o ASC ou DESC
-
Bom dia Warlem,
Veja se o exemplo abaixo te ajuda.
Simulei o seu caso com os scripts abaixo e cheguei no resultado que você espera.
veja se te ajuda.
-- CRIA TABELA CREATE TABLE VENDA( VENDA VARCHAR(10), IDPRD INT, VALOR NUMERIC(15,2), DATA_DE_VENDA DATE); -- INSERE MASSA DE DADOS INSERT INTO VENDA VALUES('31860',962,1600,'2006-08-04'); INSERT INTO VENDA VALUES('33153',962,1600,'2006-09-01'); INSERT INTO VENDA VALUES('67552',962,2051.68,'2007-12-07'); INSERT INTO VENDA VALUES('68322',962,2051.68,'2007-12-07'); INSERT INTO VENDA VALUES('73820',962,2051.68,'2008-01-03'); INSERT INTO VENDA VALUES('78142',962,2051.68,'2008-04-11'); INSERT INTO VENDA VALUES('95493',962,2189.77,'2008-11-20'); INSERT INTO VENDA VALUES('96365',962,2189.77,'2008-11-20'); -- CTE PARA SELECT WITH CTE_REG_DPL AS( SELECT VENDA, IDPRD, VALOR, DATA_DE_VENDA, RANK() OVER(ORDER BY VALOR DESC, DATA_DE_VENDA DESC) AS ORDEM FROM VENDA ) SELECT TOP 2 max(VENDA),IDPRD,VALOR,DATA_DE_VENDA,ORDEM FROM CTE_REG_DPL GROUP BY IDPRD,VALOR,DATA_DE_VENDA,ORDEM ORDER BY ORDEM;
Att,
Adriano
-