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

基于SQL匹配不同行首尾坐标生成路径序列的技术咨询

构建路网路径序列(Seq)的SQL解决方案

我来帮你搞定这个生成路径序列的问题!从你的示例数据和期望结果来看,核心需求是针对每个相同Route和Direction的路段组,按照路段的连接顺序(前一段的终点=后一段的起点)生成连续的Seq编号,每个组的Seq从1开始递增。

你之前的查询只是做了路段间的关联,但没处理序列编号,这里推荐用**递归CTE(Common Table Expression)**来实现,这是处理这类路径遍历问题最清晰的方式,适合MySQL 8.0+、PostgreSQL、SQL Server等支持递归CTE的数据库。

完整SQL代码

WITH RECURSIVE road_network AS (
    -- 锚点成员:找出每个Route+Direction组的起始路段(没有前驱路段的)
    SELECT 
        ID, Route, Direction, SLAT, SLON, ELAT, ELON,
        1 AS Seq
    FROM myTable t
    WHERE NOT EXISTS (
        SELECT 1 
        FROM myTable t2
        WHERE t2.Route = t.Route 
          AND t2.Direction = t.Direction
          AND t2.ELAT = t.SLAT 
          AND t2.ELON = t.SLON
    )
    UNION ALL
    -- 递归成员:遍历后续连接的路段,递增加Seq
    SELECT 
        t.ID, t.Route, t.Direction, t.SLAT, t.SLON, t.ELAT, t.ELON,
        rn.Seq + 1 AS Seq
    FROM myTable t
    JOIN road_network rn 
        ON t.Route = rn.Route 
        AND t.Direction = rn.Direction
        AND t.SLAT = rn.ELAT 
        AND t.SLON = rn.ELON
)
-- 输出结果并按组和序列排序
SELECT ID, Route, Direction, SLAT, SLON, ELAT, ELON, Seq
FROM road_network
ORDER BY Route, Direction, Seq;

代码解释

  1. 锚点成员部分:负责找到每个Route+Direction组的起始路段——也就是没有任何同组路段的终点和它的起点匹配的路段,把这些路段的Seq设为1(比如示例中RT-3 E的ID1、RT-9 E的ID7)。
  2. 递归成员部分:把已经找到的路段(road_network临时表)和原表关联,找到以该路段终点为起点的同组路段,将新路段的Seq设为上一段的Seq+1,以此类推遍历整个路径链。
  3. 最终查询:把所有路段的结果按Route、Direction、Seq排序,就能得到和你示例完全一致的路径序列。

这个方案会自动处理每个Route+Direction组的独立路径序列,不管每个组有多少个路段,都能正确生成连续的Seq编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:52