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

当存在往返成对记录时仅获取单行数据

处理往返成对行程记录的方案

首先先明确你的原始数据结构和内容:

from        To          KM
Delhi       Mumbai      1000
Mumbai      Delhi       1000
Gurgaon     Noida       50
Noida       Gurgaon     50
Ghaziabad   Faridabad   60
Faridabad   Ghaziabad   60
Delhi       Meerut      80
Meerut      Delhi       80

你需要保留每对往返行程的唯一记录,这里有两种实用的处理方式,我平时处理这类需求常用这两种:

方法一:统一行程方向后去重

通过字符串排序,把每对行程的起点和终点统一成固定顺序(比如让起点的字符串小于终点),然后分组去重,这样就能得到唯一的行程记录:

SELECT
  CASE WHEN `from` < `To` THEN `from` ELSE `To` END AS origin,
  CASE WHEN `from` < `To` THEN `To` ELSE `from` END AS destination,
  KM
FROM your_table
GROUP BY origin, destination, KM;

执行后会得到这样的结果:

origin      destination KM
Delhi       Mumbai      1000
Gurgaon     Noida       50
Ghaziabad   Faridabad   60
Delhi       Meerut      80

方法二:用窗口函数标记并筛选唯一记录

这种方法会保留你原始的from和To列值,通过LEAST和GREATEST函数给每对往返行程分配相同的分组键,再给每组加行号,最后筛选出每组的第一行即可:

WITH ranked_routes AS (
  SELECT
    `from`,
    `To`,
    KM,
    ROW_NUMBER() OVER (
      PARTITION BY LEAST(`from`, `To`), GREATEST(`from`, `To`)
      ORDER BY `from`
    ) AS rn
  FROM your_table
)
SELECT `from`, `To`, KM
FROM ranked_routes
WHERE rn = 1;

执行后会得到类似这样的结果(保留原始其中一条记录):

from        To          KM
Delhi       Mumbai      1000
Gurgaon     Noida       50
Ghaziabad   Faridabad   60
Delhi       Meerut      80

如果你的数据中往返里程可能存在差异(你当前的数据都是一致的),还可以调整分组后的聚合逻辑,比如用AVG(KM)取平均里程,或者MAX(KM)取最大里程,根据实际需求来就行。

内容的提问来源于stack exchange,提问作者Anurag Narayan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:47