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

请求详解Albina编写的每日订阅者最后位置查询SQL语句

Albina的SQL查询执行逻辑详解

第一步:用CTE预处理位置数据

先创建一个临时结果集ranked_locations,给每条位置记录打上排序标签:

  • CAST(timestamp AS DATE) AS event_date:把记录的时间戳转成纯日期格式,目的是把同一用户同一天的位置记录归到一组。
  • ROW_NUMBER() OVER (...) AS rn:这是关键的窗口函数,具体作用是:
    • PARTITION BY subscriber_id, event_date:按「订阅者ID+日期」分组,每个用户每天的记录单独成一组,互不干扰。
    • ORDER BY timestamp DESC:在每个组内部,按时间戳从晚到早排序,当天最后一次的位置记录会排在组里的第1位,对应的rn值就是1。

第二步:筛选出每天的最后位置

从预处理的临时结果集里,只挑rn = 1的记录:

  • 因为每个「订阅者+日期」组里,rn=1的那条就是该用户当天时间最晚的位置,正好是我们要找的“当日最后位置”。
  • 最后输出订阅者ID、日期、对应的最后位置即可。

额外说明

如果同一天同一个用户有好几条时间戳完全相同的位置记录,ROW_NUMBER()会随机给这些记录分配1、2、3...的序号,最终只会保留一条。要是想保留所有同时间的最后位置,把ROW_NUMBER()换成RANK()就行——这样同时间的记录rn都会是1,结果里会包含这些重复项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:52:06