我正在尝试编写一个 Kusto 查询来查找在由另一列分组的列中具有最大值但还需要第三(剩余)列的记录。
假设有三列 A(timestamp) B(impvalue: number) 和 C (anothervalue:string)。我还需要获取按 C 分组的记录,其中包含最大时间戳及其相应的 B 列。
在 Sql 中,我很清楚如何使用自连接来完成。我是 Kusto 的新手,我尝试了一些与 summarise、join 和 top 运算符的组合,但无法使其工作。
例子:
输出:
我正在尝试编写一个 Kusto 查询来查找在由另一列分组的列中具有最大值但还需要第三(剩余)列的记录。
假设有三列 A(timestamp) B(impvalue: number) 和 C (anothervalue:string)。我还需要获取按 C 分组的记录,其中包含最大时间戳及其相应的 B 列。
在 Sql 中,我很清楚如何使用自连接来完成。我是 Kusto 的新手,我尝试了一些与 summarise、join 和 top 运算符的组合,但无法使其工作。
例子:
输出:
您可以使用arg_max()
聚合函数:https ://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/arg-max-aggfunction 。
例如:
datatable(A:datetime, B:long, C:string)
[
datetime(2020-08-20 12:00:00), 50, "abc",
datetime(2020-08-20 12:10:00), 30, "abc",
datetime(2020-08-20 12:05:00), 100, "abc",
datetime(2020-08-20 12:00:00), 40, "def",
datetime(2020-08-20 12:05:00), 120, "def",
datetime(2020-08-20 12:10:00), 80, "def",
]
| summarize arg_max(A, *) by C
C | 一个 | 乙 |
---|---|---|
美国广播公司 | 2020-08-20 12:10:00.0000000 | 30 |
定义 | 2020-08-20 12:10:00.0000000 | 80 |
这不是最优雅的解决方案,但它有效:
let X = datatable (a: string, b: int, c: string) [
"8/24/2021, 12:40:00.042 PM", 50, "abc",
"8/24/2021, 12:40:10.042 PM", 30, "abc",
"8/24/2021, 12:40:05.042 PM", 100, "abc",
"8/24/2021, 12:40:00.042 PM", 40, "def",
"8/24/2021, 12:40:05.042 PM", 120, "def",
"8/24/2021, 12:40:10.042 PM", 80, "def"
];
X
| summarize Answer = max(a)
| join X on $left.Answer == $right.a
| project a,b,c