Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybierz najnowszą grupę rekordów według nazwy użytkownika w SQL Server 2008

Masz tutaj kilka opcji, ale używając dodawania ROW_NUMBER pogrupowane według user i posortowane (malejąco) według Twojego timestamp umożliwia łatwy wybór najnowszych rekordów.

Korzystam z 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

Możesz też wybrać maksymalną sygnaturę czasową na użytkownika i dołączyć do niej.

Korzystanie z 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest CZAS STATYSTYKI w SQL Server?

  2. Korzystanie ze schematów baz danych w SQL Server

  3. Połącz OUTPUT insert.id z wartością z wybranego wiersza

  4. SQL Server 2005 ROW_NUMBER() bez ORDER BY

  5. Czy mogę używać wielu z?