none
View (SELECT) para visualização no Crystall RRS feed

  • 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!





    quinta-feira, 20 de março de 2014 00:14

Respostas

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

    quinta-feira, 20 de março de 2014 03:39
  • 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]

    sábado, 22 de março de 2014 23:56