如何使用Kusto KQL筛选Azure Data Explorer中日期列最大值对应的数据
KQL筛选最新日期对应所有行的正确写法
你尝试的|where datecolumn == max(datecolumn)写法行不通,因为max()是聚合函数,where子句执行阶段还没完成聚合计算,没法直接引用聚合结果。下面给你几种实用的实现方式,适配你带extend的实际场景:
方法1:最简洁的top 1 with ties
这种写法最直观,直接取最新日期对应的所有行,支持在前面添加extend逻辑:
// 替换成你的表名 YourTable // 这里插入你的extend操作,比如新增计算列 | extend AnimalInfo = strcat(Animals, " (", Color, ")") // 将字符串日期转成datetime类型(示例中是dd-MM-yyyy格式),按日期降序取所有同最新日期的行 | top 1 with ties by todatetime(Datecolumn, 'dd-MM-yyyy') desc
针对你的示例数据,执行后会返回09-08-2023对应的2行数据。
方法2:子查询获取最大日期后过滤
先单独计算出最新日期,再用这个值过滤原表,适合需要复用最新日期值的场景:
let latest_date = YourTable | summarize max(todatetime(Datecolumn, 'dd-MM-yyyy')); YourTable | extend [你的extend逻辑] | where todatetime(Datecolumn, 'dd-MM-yyyy') == latest_date
方法3:窗口函数rank()排名筛选
通过给日期排名,取排名为1的所有行(同日期的行排名相同):
YourTable | extend [你的extend逻辑] // 按日期降序排名,同日期的行rank值相同 | rank by todatetime(Datecolumn, 'dd-MM-yyyy') desc // 筛选排名第一的行(即最新日期的所有行) | where rank == 1
注意事项
如果你的Datecolumn是字符串类型,必须用todatetime(列名, '格式')转成datetime类型再比较,避免字符串排序导致的错误(比如01-09-2023字符串比31-08-2023小,但实际日期更大)。
内容的提问来源于stack exchange,提问作者nrod88
相关产品推荐
相关产品推荐

