如何使用Kusto查询近7天内每日同user id的最新记录
用Kusto获取每个用户每日最新时序记录的解决方案
这问题我太熟啦!要实现「近7天内每个用户每日的最新记录」,Kusto里的arg_max()函数简直是为这个场景量身定做的,配合分组和时间过滤就能轻松搞定。
先明确假设的表结构(你可以替换成自己的实际字段)
假设你的时序数据表叫UserTimeSeriesData,包含以下核心字段:
user_id:用户唯一标识record_time:每条记录的生成时间(时序字段)value1、value2...:其他业务数据字段
完整查询语句
// 筛选近7天数据,按用户+日期分组取最新记录 UserTimeSeriesData | where record_time >= ago(7d) // 第一步:只保留近7天的记录 | extend record_date = startofday(record_time) // 把时间转成当日起始时间,用于按天分组 | summarize arg_max(record_time, *) by user_id, record_date // 按用户+日期分组,取每组内时间最新的完整记录 | project-away record_date // 可选:如果不需要分组用的日期字段,就删掉它
语句逐段解释
where record_time >= ago(7d):先把数据范围限定在近7天,避免不必要的计算,提升查询效率extend record_date = startofday(record_time):将每条记录的时间转换为当天的0点(比如2024-05-20 14:30:00会变成2024-05-20 00:00:00),这样同一用户同一天的所有记录会被归到同一个分组里summarize arg_max(record_time, *) by user_id, record_date:这是核心逻辑!arg_max(col, *)表示在每个分组内,找到record_time最大(也就是最新)的那条记录,同时保留该行的所有其他字段;by后面的user_id和record_date是分组的依据,确保每个用户每天只会返回一条最新记录project-away record_date:这是可选步骤,如果你的结果里不需要这个临时生成的日期字段,用它可以移除掉;如果需要保留来确认分组日期,就删掉这行就行
注意事项
如果你的表中时间字段不是record_time,或者表名不是UserTimeSeriesData,记得替换成自己实际的字段名和表名哦!
内容的提问来源于stack exchange,提问作者swordHeart
相关产品推荐
相关产品推荐

