Gon*_*ndy 1 sql t-sql sql-server-2008
我有一个包含这些数据的表格:
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
Run Code Online (Sandbox Code Playgroud)
我需要为特定的每个选民(用户名)只获得一个最新的选票voting_ID.
例如,我需要返回数据 @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
Run Code Online (Sandbox Code Playgroud)
请帮我构建那个SQL Server 2008查询..谢谢PS:表名是 ballots
这里有几个选项,但使用添加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
Run Code Online (Sandbox Code Playgroud)
或者,您可以选择每个用户的最大时间戳并加入其中.
使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |