Usuário com melhor resposta
View (SELECT) para visualização no Crystall

Pergunta
-
Tenho uma tabela que preciso trazer apenas dois campos. 'NOME' e 'DATA'. Os nomes se repetem várias vezes, porém preciso que me traga apenas as últimas 2 inclusões: No exemplo abaixo preciso que me traga no resultado do SELECT apenas os que estão sublinhados.
[NOME] [DATA]
'MARIA ABADIA' 2013-12-12
'MARIA ABADIA' 2013-12-18
'MARIA ABADIA' 2014-01-28
'MARIA ABADIA' 2014-02-20
'JOAO PAULO ' 2014-03-01
'JOAO PAULO' 2014-03-05
'JOAO PAULO' 2014-03-18
Obrigado!
- Editado Willian Elias quinta-feira, 20 de março de 2014 00:19
Respostas
-
Boa noite,
Experimente mais ou menos dessa forma:
with CTE_RN as ( select Nome, Data, ROW_NUMBER() OVER(PARTITION BY Nome ORDER BY Data DESC) as RN from Tabela ) select * from CTE_RN where RN <= 2
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
Todas as Respostas
-
Boa noite,
Experimente mais ou menos dessa forma:
with CTE_RN as ( select Nome, Data, ROW_NUMBER() OVER(PARTITION BY Nome ORDER BY Data DESC) as RN from Tabela ) select * from CTE_RN where RN <= 2
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
William,
Não existe nenhum campo chave primária ou indicador da ordem do que esta sendo inserido?
Se existe basta fazer o Select com base nesta coluna, caso contrário exemplo do Gapimex é uma possível solução, mas eu vou indicar as minhas, tanto para o SQL Server 2005 ou 2008 sem utilizar CTE, como também, para o 2012 trabalhando com o objeto Sequence.
-- Utilizando - Sequence - SQL Server 2012 --
-- Criando uma nova Tabela -- CREATE TABLE Familia (Nomes varchar(15)) Go INSERT INTO Familia values ('Pedro'), ('Fernanda'), ('Eduardo'), ('João Pedro'), ('Maria Luíza') -- Criando uma nova Sequência de Valores -- CREATE SEQUENCE Seq As INT -- Tipo START WITH 1 -- Valor Inicial (1) INCREMENT BY 1 -- Avança de um em um MINVALUE 1 -- Valor mínimo 1 MAXVALUE 10 -- Valor máximo 10000 CACHE 10 -- Mantém 10 posições em cache NO CYCLE -- Não irá reciclar -- Utilizando a Sequência de Valores -- SELECT Next VALUE FOR Seq OVER (ORDER BY NOMES Desc) AS ID, Nomes FROM Familia
-- SQL Server 2005 ou SQL Server 2008 sem CTE --
-- Criando uma nova Tabela -- CREATE TABLE Familia (Nomes varchar(15)) Go INSERT INTO Familia values ('Pedro'), ('Fernanda'), ('Eduardo'), ('João Pedro'), ('Maria Luíza') SELECT Top 2 ROW_NUMBER() OVER (ORDER BY NOMES Desc) AS ID, Nomes FROM Familia
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]
- Sugerido como Resposta Durval RamosModerator quinta-feira, 8 de maio de 2014 19:31