【问题标题】:Kusto: Filter results to latest record for each IDKusto:将结果过滤到每个 ID 的最新记录
【发布时间】:2021-09-09 19:35:32
【问题描述】:

假设我在Azure Data Explorer 中有如下表格:

let data = datatable(id:int, dateTime:datetime)
[
    1,"2021-03-03",
    1,"2021-03-04",
    1,"2021-03-12",
    2,"2021-03-04",
    2,"2021-03-04",
    2,"2021-03-07"
]

我想要一个Kusto Query Language 查询,它将找到每个ID 的最新日期时间的记录。即,我希望查询返回以下记录:

id dateTime
2 2021-03-07 00:00:00.0000000
1 2021-03-12 00:00:00.0000000

我查看了this question,但在这种情况下,OP 只需要一条记录,这是整个表的最大值。我想取回 each id 的最新日期时间记录。

我该怎么做?


(此示例表仅用于说明目的,我处理的真实数据要大得多,并且有许多 ID,并且未排序。)

【问题讨论】:

    标签: azure-data-explorer kql


    【解决方案1】:

    我想要一个 Kusto 查询语言查询,它将找到每个 id 的最新日期时间的记录

    如果您只想获取每个 id 的最大日期时间值,您应该使用 max() 聚合函数:

    datatable(id:int, dateTime:datetime, message:string)
    [
        1,"2021-03-03", "a",
        1,"2021-03-04", "b",
        1,"2021-03-12", "c",
        2,"2021-03-04", "d",
        2,"2021-03-04", "e",
        2,"2021-03-07", "f"
    ]
    | summarize max(dateTime) by id
    
    id max_dateTime
    2 2021-03-07 00:00:00.0000000
    1 2021-03-12 00:00:00.0000000

    或者,如果您希望保留最大化记录的其他列,您应该使用arg_max() 聚合函数:

    datatable(id:int, dateTime:datetime, message:string)
    [
        1,"2021-03-03", "a",
        1,"2021-03-04", "b",
        1,"2021-03-12", "c",
        2,"2021-03-04", "d",
        2,"2021-03-04", "e",
        2,"2021-03-07", "f"
    ]
    | summarize arg_max(dateTime, *) by id
    
    id dateTime message
    2 2021-03-07 00:00:00.0000000 f
    1 2021-03-12 00:00:00.0000000 c

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-21
      • 2020-07-29
      • 2016-01-29
      • 2021-10-04
      • 2021-01-10
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多