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

使用Window Functions标记用户重复访问同一目的地的SQL实现

用窗口函数标记用户首次/重复前往的目的地行程

需求说明

现有行程级数据表,每行对应唯一行程。需要为每条行程添加布尔标识Same_Destination:

  • 同一用户首次前往某目的地的行程,标记为0
  • 该用户后续(包括非紧邻的再次前往)同一目的地的行程,标记为1

初始方案的问题

初始尝试使用LAG()函数仅对比分区内的前一条记录,代码如下:

CASE WHEN Destination = LAG(Destination) OVER (PARTITION BY Person) THEN 1 ELSE 0 END

这种方式只能识别紧邻的重复目的地,无法处理非连续的返回情况(比如示例中Tina第5次行程回到Arizona,初始代码会错误标记为0)。

正确解决方案(窗口函数实现)

使用ROW_NUMBER()窗口函数,按「用户+目的地」分区,再按行程顺序排序。分区内的第一条记录即为首次前往,标记0;其余记录标记1。

完整SQL代码

SELECT
    Person,
    Trip,
    Destination,
    CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY Person, Destination ORDER BY Trip) = 1 
        THEN 0 
        ELSE 1 
    END AS Same_Destination
FROM trips
ORDER BY Person, Trip;

数据示例

起始数据

PersonTripDestination
BobaHawaii
BobbHawaii
BobcFlorida
KevinaTexas
KevinbIowa
TinaaArizona
TinabArizona
TinacCalifornia
TinadNew Mexico
TinaeArizona
TinafCalifornia

期望输出

PersonTripDestinationSame_Destination
BobaHawaii0
BobbHawaii1
BobcFlorida0
KevinaTexas0
KevinbIowa0
TinaaArizona0
TinabArizona1
TinacCalifornia0
TinadNew Mexico0
TinaeArizona1
TinafCalifornia1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:08