You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kusto查询语言中用partition by获取分组最小日期且保留全量数据?

KQL按分组保留最小DDay的所有行(避免关联原表)

问题

表tb1需按SupplierID分组,获取每个分组中DDay最小的所有行,保留全部列与符合条件的行,且不想通过聚合后关联原表实现。此前尝试的partition语句仅返回每个分组的一行,未达预期:

tb1
| partition hint.strategy = shuffle by SupplierID (top 1 by DDay asc)

原表示例(根据截图还原):

SupplierIDDDay其他列
11...
11...
12...
22...
23...

期望输出:

SupplierIDDDay其他列
11...
11...
22...

可行方案

方案1:Partition内计算最小值并过滤

在partition内部先算出当前分组的最小DDay,再筛选出等于该值的所有行:

tb1
| partition hint.strategy = shuffle by SupplierID (
    let min_dday = min(DDay);
    where DDay == min_dday
)

方案2:窗口函数(更简洁)

用rank()窗口函数按SupplierID分区,标记出DDay最小的行,再过滤保留:

tb1
| rank over (partition by SupplierID order by DDay asc) as rnk
| where rnk == 1
| project-away rnk
  • 若同一分组内有多个DDay相同的最小值,rank()会给这些行都标记为1,全部保留;
  • 若只需保留其中一行,可替换为row_number(),但会随机选取一行。

原语句问题说明

你之前的top 1 by DDay asc在每个分区内仅返回单条最小DDay记录,无法保留分组内所有相同最小值的行,因此不符合需求。

内容的提问来源于stack exchange,提问作者M J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:07:21