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

KQL查询使用distinct后返回结果始终固定的问题求助

问题分析与解决方案

你的查询核心问题出在连续两次对User表执行inner join,这会导致不必要的笛卡尔积,进而引发数据重复,最终让distinct的结果不符合预期。

具体问题拆解:

  • 你先通过Major字段关联User表,得到一批匹配记录;接着又通过Minor字段再次关联User表。这相当于把第一次join后的每条记录,再和所有Minor匹配的User记录做一次组合,会产生大量冗余的重复关联结果。
  • 不用distinct时,这些重复结果加上原始表中同一用户的不同日期记录,会显示很多条目;而用distinct后,只是把这些重复的用户记录去重,但因为join逻辑错误,得到的46条其实是错误关联后的唯一用户组合,并非真实的目标范围内用户数。

修正后的查询:

应该将两次join合并为一次,用Major和Minor同时作为关联条件,这样才能正确匹配到对应的用户:

TableName
| where Date <> ''
| where Date >= todatetime('2022-11-07 00:00:00')
| where Date <= todatetime('2022-11-08 17:38:00')
| where acos(sin(25.27323946648474) * sin(Latitude) + cos(25.27323946648474) * cos(Latitude) * cos(Longitude - 51.499766541858236)) * 6371 <= 50
| where StayType == 'I'
// 合并为一次join,同时用Major和Minor关联User表
| join kind=inner User on $left.Major == $right.Major and $left.Minor == $right.Minor
| project DocumentNumber, DocumentTypeString, tostring(DocumentExpiryDate), HCNO, NameEnglish, NameArabic, Gender, NationalityName, Vaccinated, PhoneType
// 如果需要去重同一用户的多条记录,保留distinct即可
| distinct DocumentNumber, DocumentTypeString, NameEnglish, NameArabic, Gender, NationalityName, Vaccinated, PhoneType, HCNO
| order by DocumentTypeString asc

额外说明:

  • 如果你的User表中,Major和Minor组合是唯一标识用户的键,那么一次join就能准确匹配到对应用户,不会产生冗余。
  • distinct的作用是去除指定列组合完全重复的记录,如果你想获取范围内的唯一用户,这个操作是合理的,但前提是关联逻辑正确,否则去重后的结果也会失真。

内容的提问来源于stack exchange,提问作者Muhammad Usama Alam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:20:27