Kusto:将结果过滤到每个 ID 的最新记录

Sha*_*hop 11 kql azure-data-explorer

假设我在Azure 数据资源管理器中有一个如下所示的表:

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"
]
Run Code Online (Sandbox Code Playgroud)

我想要一个Kusto 查询语言查询,它将查找每个 id 具有最新日期时间的记录。即,我希望查询返回以下记录:

ID 约会时间
2 2021-03-07 00:00:00.0000000
1 2021-03-12 00:00:00.0000000

我查看了这个问题,但在这种情况下,操作员只需要一条记录,这是整个表的最大值。我想取回每个id 的最新日期时间的记录。

我怎样才能做到这一点?


(此示例表仅供说明之用,我正在处理的实际数据要大得多,并且具有许多 ID,并且未排序。)

Yon*_*i L 25

我想要一个 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
Run Code Online (Sandbox Code Playgroud)
ID 最大日期时间
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
Run Code Online (Sandbox Code Playgroud)
ID 约会时间 信息
2 2021-03-07 00:00:00.0000000 F
1 2021-03-12 00:00:00.0000000 C