我是Microsoft SQL服务器的新用户,正在使用现有数据库。我需要查询一个表来获取客户列表。每个客户都有CustID和HistoryID。对客户记录的某些编辑(在桌面应用程序中)会导致新行写入表中,历史ID会增加,例如:
| CustID | HistoryID | Name | City |
| AB1 | 1 | Bob Smith | Bangkok |
| CD2 | 1 | Joe Bloggs | London |
| CD2 | 2 | Joe Bloggs | Paris |
| ZA9 | 1 | Sarah Jones | Berlin |
我需要获得最新的"记录每个客户(历史记录ID最高的那个) - 所以在上面的例子中,我得到#34; Bob Smith"的行," Joe Bloggs&#的第二行34; (不是第一个)和#34; Sarah Jones"。
这样做的最佳查询是什么?感谢
答案 0 :(得分:1)
使用ROW_NUMBER()
:
select t.*
from (select t.*,
row_number() over (partition by custid order by historyid desc) as seqnum
from t
) t
where seqnum = 1;