SQL Server中如何按TicketID分组查询最大ID值
解决SQL Server中获取每个TicketID对应最大ID记录的问题
针对你的需求,这里提供几种在SQL Server中实现的常用方法:
方法一:子查询 + IN 子句
先通过分组查询得到每个TicketID对应的最大ID值,再用主查询筛选出这些ID对应的完整记录:
SELECT ID, Date, TicketID FROM TicketInformation WHERE ID IN ( SELECT MAX(ID) FROM TicketInformation GROUP BY TicketID );
方法二:窗口函数 ROW_NUMBER()
使用窗口函数按TicketID分组,对每个分组内的记录按ID降序排序,取排序后行号为1的记录,这种方式适合需要保留更多字段的场景:
WITH RankedTickets AS ( SELECT ID, Date, TicketID, ROW_NUMBER() OVER (PARTITION BY TicketID ORDER BY ID DESC) AS rn FROM TicketInformation ) SELECT ID, Date, TicketID FROM RankedTickets WHERE rn = 1;
方法三:JOIN 分组结果
将原表与分组得到的最大ID表进行连接,匹配出对应记录:
SELECT t.ID, t.Date, t.TicketID FROM TicketInformation t JOIN ( SELECT TicketID, MAX(ID) AS MaxID FROM TicketInformation GROUP BY TicketID ) tm ON t.TicketID = tm.TicketID AND t.ID = tm.MaxID;
以上三种方法都能得到你需要的结果(ID为3和6的两条记录),可以根据实际场景选择合适的写法。
内容的提问来源于stack exchange,提问作者Ale Yanczuk
相关产品推荐
相关产品推荐

