Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Selecione o grupo de registros mais recente por nome de usuário no SQL Server 2008


Você tem várias opções aqui, mas usando a adição de um ROW_NUMBER agrupados por user e ordenado (decrescente) em seu timestamp permite que você selecione facilmente os registros mais recentes.

Usando ROW_NUMBER
SELECT *
FROM   (
         SELECT ID, voting_ID, username, timestamp, XMLBallot
                , rn = ROW_NUMBER() OVER (PARTITION BY voting_ID, username ORDER BY timestamp DESC)
         FROM   Ballots
       ) bt 
WHERE  rn = 1

Como alternativa, você pode selecionar o carimbo de data/hora máximo por usuário e ingressar nele.

Usando MAX
SELECT bt.ID, bt.voting_ID, bt.username, bt.timestamp, bt.XMLBallot
FROM   Ballots bt
       INNER JOIN (
          SELECT username, voting_ID, timestamp = MAX(timestamp)
          FROM   Ballots
          GROUP BY
                 username, voting_ID
        ) btm ON btm.username = bt.Username
                 AND btm.voting_ID = bt.voting_ID
                 AND btm.timestamp = bt.timestamp