首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >幂M查询/Kusto从组中获取第一个

幂M查询/Kusto从组中获取第一个
EN

Stack Overflow用户
提问于 2019-03-20 20:27:07
回答 2查看 2.6K关注 0票数 6

我有一张表,看起来像这样:

代码语言:javascript
运行
复制
id  timestamp  value1  value2
 1  09:12:37     1       1
 1  09:12:42     1       2
 1  09:12:41     1       3
 1  10:52:16     2       4
 1  10:52:18     2       5
 2  09:33:12     3       1
 2  09:33:15     3       2
 2  09:33:13     3       3

我需要按id和value1分组。对于每个组,我希望具有最高时间戳的行。

上表的结果如下所示:

代码语言:javascript
运行
复制
id  timestamp  value1  value2
 1  09:12:42     1       2
 2  09:33:15     3       2

我知道有summarize运算符,它会给我以下结果:

代码语言:javascript
运行
复制
mytable
| project id, timestamp, value1, value2
| summarize max(timestamp) by id, value1

Result:
     id  timestamp  value1
      1  09:12:42     1
      2  09:33:15     3

但我也无法获得此行的value2。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-20 23:51:23

如果我正确理解了您的问题,您应该能够使用summarize arg_max()

文档:https://docs.microsoft.com/en-us/azure/kusto/query/arg-max-aggfunction

代码语言:javascript
运行
复制
datatable(id:long, timestamp:datetime, value1:long, value2:long)
[
 1, datetime(2019-03-20 09:12:37), 1, 1,
 1, datetime(2019-03-20 09:12:42), 1, 2,
 1, datetime(2019-03-20 09:12:41), 1, 3,
 1, datetime(2019-03-20 10:52:16), 2, 4,
 1, datetime(2019-03-20 10:52:18), 2, 5, // this has the latest timestamp for id == 1
 2, datetime(2019-03-20 09:33:12), 3, 1,
 2, datetime(2019-03-20 09:33:15), 3, 2, // this has the latest timestamp for id == 2
 2, datetime(2019-03-20 09:33:13), 3, 3,
]
| summarize arg_max(timestamp, *) by id

这将导致:

代码语言:javascript
运行
复制
| id | timestamp                   | value1 | value2 |
|----|-----------------------------|--------|--------|
| 2  | 2019-03-20 09:33:15.0000000 | 3      | 2      |
| 1  | 2019-03-20 10:52:18.0000000 | 2      | 5      |
票数 12
EN

Stack Overflow用户

发布于 2019-03-20 21:07:37

我找到了解决我的问题的办法,但也许还有更好的办法。

代码语言:javascript
运行
复制
mytable
| project id, timestamp, value1, value2
| order by timestamp desc
| summarize max(timestamp), makelist(value2) by id, value1

结果如下:

代码语言:javascript
运行
复制
 id  timestamp  value1  list_value2
  1  09:12:42     1     ["2", "3", "1"]
  2  09:33:15     3     ["2", "3", "1"]

现在可以通过添加以下内容来扩展查询

代码语言:javascript
运行
复制
| project max_timestamp, id, value1, list_value2[0]

来获取该列表中的第一个元素。将'0‘替换为介于0和长度(List_value2)-1之间的任何数字,以访问其他值。

另一个建议:我使用的时间戳是由ApplicationInsights生成的。在我们的代码中,我们调用TrackTrace来记录一些数据。如果您按此时间戳对行进行排序,则生成的行列表的顺序与在代码中生成数据的顺序不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55260787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档