我有一张表,其中包含以下数据:
ID voting_ID username timestamp XMLBallot 1 9 voter01 23. 4. 2012 8:54:45 xmldata 2 9 voter01 21. 4. 2012 14:00:34 xmldata 3 9 voter02 20. 4. 2012 16:01:10 xmldata 4 11 voter01 23. 4. 2012 8:40:45 xmldata 5 9 voter03 19. 4. 2012 21:18:49 xmldata
我只需要为具体的每个投票人(用户名)获得一张最新的选票voting_ID。
voting_ID
例如我需要返回的数据 @voting_ID=9
@voting_ID=9
ID voting_ID username timestamp XMLBallot 1 9 voter01 23. 4. 2012 8:54:45 xmldata 3 9 voter02 20. 4. 2012 16:01:10 xmldata 5 9 voter03 19. 4. 2012 21:18:49 xmldata
请帮助我建立该SQL Server 2008查询。。谢谢PS:表名是 ballots
ballots
您在此处有几个选项,但是使用添加ROW_NUMBER分组依据user和排序(降序)timestamp可以轻松选择最新记录。
ROW_NUMBER
user
timestamp
使用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
或者,您可以选择每个用户的最大时间戳并加入。
使用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