如何在SQL Server中结合TOP与IN命令实现各终端取3条最新记录?
解决每个终端取3条最新记录的问题
你原来的SQL语句是从符合条件的所有记录里全局取前3条,所以只会显示某一个终端的最新数据。要实现每个终端都返回3条最新记录,可以用SQL的窗口函数ROW_NUMBER()来实现,具体代码如下:
SELECT * FROM ( SELECT *, -- 按终端分组,每组内按Id倒序编号 ROW_NUMBER() OVER (PARTITION BY Terminal ORDER BY Id DESC) AS RowNum FROM AcceptorRequests WHERE Terminal IN ('70270191','70347395') ) AS RankedRequests -- 筛选每组内前3条记录 WHERE RowNum <= 3 -- 最后按终端和Id倒序排列,结果更清晰 ORDER BY Terminal, Id DESC
代码说明:
PARTITION BY Terminal:把数据按终端编号分成独立的组ORDER BY Id DESC:每个组内的记录按Id从大到小排序(确保最新的记录排在前面)ROW_NUMBER():给每个组内的记录分配唯一的序号,从1开始- 外层查询只保留序号≤3的记录,这样每个终端就会返回3条最新的记录
内容的提问来源于stack exchange,提问作者Younes Koopai
相关产品推荐
相关产品推荐

