SQL如何按指定条件筛选最大Draw值行,获取指定日期和路线的主导Zip数据
SQL实现按分组取最大值获取主导Zip
需求核心
按DelDate(交付日期)、Route(路线)分组,筛选每组内Draw值最高的完整行数据,即为对应分组的主导Zip记录。
实现方案
方案1:窗口函数实现(推荐,兼容MySQL8.0+、PostgreSQL、SQL Server、Oracle等主流数据库)
使用ROW_NUMBER()窗口函数对分组内数据按Draw倒序排名,取排名为1的记录即可:
WITH ranked_data AS ( SELECT DelDate, Plant, Route, Zip, City, State, Draw, -- 按日期+路线分组,同组内按Draw值从高到低排序 ROW_NUMBER() OVER(PARTITION BY DelDate, Route ORDER BY Draw DESC) AS rank_num FROM 你的实际表名 -- 此处替换为你自己的表名 ) SELECT DelDate, Plant, Route, Zip, City, State, Draw FROM ranked_data WHERE rank_num = 1;
特殊场景说明:如果同组内存在多个Zip的Draw值相同且均为最大值,需要全部返回时,将
ROW_NUMBER()替换为RANK()即可。
方案2:子查询关联实现(兼容低版本数据库,如MySQL5.x)
先分组查询出每个日期+路线对应的最大Draw值,再关联原表匹配完整行:
SELECT t1.* FROM 你的实际表名 t1 INNER JOIN ( SELECT DelDate, Route, MAX(Draw) AS max_draw FROM 你的实际表名 GROUP BY DelDate, Route ) t2 ON t1.DelDate = t2.DelDate AND t1.Route = t2.Route AND t1.Draw = t2.max_draw;
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

