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

如何用SQL查询每个用户每日的最后所在区域位置?

查询每个用户每日最后所在区域的SQL方案

数据表

abonentregion_iddttm
7072110988327222021-08-18 13:15
7072110988327222021-08-18 14:00
7072110988215342021-08-18 14:15
7072110988327222021-08-19 09:00
7071107101125332021-08-19 09:15
7071107101327222021-08-19 09:27

字段说明

  • abonent:用户号码
  • region_id:用户所在区域ID
  • dttm:通话日期时间

下面提供两种可行的SQL写法,根据你的数据库版本选择:

方法一:窗口函数法(推荐,适用于MySQL 8+、PostgreSQL、SQL Server等)

用ROW_NUMBER()窗口函数给每个用户每天的记录按时间倒序编号,取编号为1的就是当天最后一条记录:

SELECT abonent, DATE(dttm) AS record_date, region_id
FROM (
    SELECT 
        abonent, 
        dttm, 
        region_id,
        -- 按用户+日期分组,组内按时间倒序排号
        ROW_NUMBER() OVER (PARTITION BY abonent, DATE(dttm) ORDER BY dttm DESC) AS rn
    FROM your_table_name
) t
WHERE rn = 1;

方法二:关联子查询法(兼容旧版数据库如MySQL 5.x)

先统计每个用户每天的最晚通话时间,再关联原表获取对应区域:

SELECT 
    t1.abonent, 
    DATE(t1.dttm) AS record_date, 
    t1.region_id
FROM your_table_name t1
INNER JOIN (
    -- 子查询得到每个用户每天的最晚时间
    SELECT 
        abonent, 
        DATE(dttm) AS record_date, 
        MAX(dttm) AS max_dttm
    FROM your_table_name
    GROUP BY abonent, DATE(dttm)
) t2 ON t1.abonent = t2.abonent 
    AND DATE(t1.dttm) = t2.record_date 
    AND t1.dttm = t2.max_dttm;

注意:把代码里的your_table_name替换成你实际的表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:55:29