You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Sheets QUERY()中忽略日期列获取唯一最新最长行程?

问题描述

有一组行程数据,每条记录为日期、系统、线路、公交路线、距离、模式组成的6元组。需求如下:

  • 获取最长的15条行程(按距离降序)
  • 对于系统、线路、公交路线、距离完全相同的重复组合,仅保留日期最新的那条记录
  • 保留日期列

之前尝试的方法存在问题:

  1. 使用QUERY函数:
    =QUERY('Mileage 2026'!A:E, "select * where E is not null order by E desc limit 10")
    
    结果出现仅日期不同的重复行,无法去重。
  2. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 23:48:11