如何在Google Sheets QUERY()中忽略日期列获取唯一最新最长行程?
问题描述
有一组行程数据,每条记录为日期、系统、线路、公交路线、距离、模式组成的6元组。需求如下:
- 获取最长的15条行程(按距离降序)
- 对于
系统、线路、公交路线、距离完全相同的重复组合,仅保留日期最新的那条记录 - 保留日期列
之前尝试的方法存在问题:
- 使用QUERY函数:
结果出现仅日期不同的重复行,无法去重。=QUERY('Mileage 2026'!A:E, "select * where E is not null order by E desc limit 10") - 使用SORTN函数:
仅按距离排序去重,返回的是该距离组合下最早的行程,而非最新的。=SORTN('Mileage 2026'!A2:E, 10, 2, 5,FALSE)
解决方案
方法1:SORT + SORTN 组合(推荐)
先按「距离降序、日期降序」整体排序,再用SORTN按指定组合去重,保留每个组合的最新行,最后取前15条:
=SORTN(SORT('Mileage 2026'!A2:F, 5, FALSE, 1, FALSE), 15, 2, {2,3,4,5}, TRUE)
参数说明:
SORT('Mileage 2026'!A2:F, 5, FALSE, 1, FALSE):先对数据排序,第5列(距离)降序,第1列(日期)降序,确保同一距离组合下最新日期的记录排在最前面SORTN(..., 15, 2, {2,3,4,5}, TRUE):取前15条,第2参数2表示去除重复项,重复判断依据是第2、3、4、5列(系统、线路、公交路线、距离),TRUE表示这些列完全相同即视为重复,此时会保留每个组合中排在最前面的(也就是最新日期的)记录
方法2:QUERY 嵌套分组查询
先分组获取每个系统、线路、公交路线、距离组合的最新日期,再筛选原数据中匹配这些日期的记录,最后按距离降序取前15:
=QUERY( 'Mileage 2026'!A:F, "SELECT * WHERE A MATCHES '"&TEXTJOIN("|", TRUE, QUERY('Mileage 2026'!A:F, "SELECT MAX(A) WHERE E IS NOT NULL GROUP BY B,C,D,E"))&"' ORDER BY E DESC LIMIT 15", 1 )
参数说明:
- 内层
QUERY(..., "SELECT MAX(A) WHERE E IS NOT NULL GROUP BY B,C,D,E"):按指定4列分组,获取每个组合的最大日期(最新日期) TEXTJOIN("|", TRUE, ...):将这些日期拼接成正则匹配的格式- 外层
QUERY:筛选原数据中日期匹配上述最大日期的记录,再按距离降序取前15,最后参数1表示保留表头
内容的提问来源于stack exchange,提问作者bigyihsuan
相关产品推荐
相关产品推荐

