如何查询Microsoft SQL Server中的两个ID?

时间:2017-06-16 11:16:16

标签: sql sql-server sql-server-2008

我是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"。

这样做的最佳查询是什么?感谢

1 个答案:

答案 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;