Получить другие столбцы на основе максимум одного столбца в Kusto
Я пытаюсь написать запрос Kusto, чтобы найти запись, которая имеет максимальное значение в столбце, сгруппированном по другому столбцу, но также требует с ним 3-х (оставшихся) столбцов.
Пусть будет три столбца A(отметка времени), B (значение: число) и C (другое значение: строка). Мне нужно получить записи, сгруппированные по C с максимальной меткой времени и соответствующим столбцом B.
В Sql я хорошо знаю, как это сделать с помощью самостоятельного соединения. Я новичок в Kusto, я пробовал несколько комбинаций с оператором summarize, join и top, но не смог заставить его работать.
Пример:
Выход:
2 ответа
вы можете использовать
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
Это не самое элегантное решение, но оно работает:
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