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

为何两个SQL查询返回记录数不同?已定位问题原因

查询结果记录数差异的原因与解决

问题背景

测试两种用于识别某业务单元内每个订阅者最新发送记录的查询时,发现返回结果不一致:查询2比查询1多返回约3000条记录。已确认EventDate和SubscriberKey无空值,且不存在重复的SubscriberKey。

对比的查询语句

查询1

SELECT top 250000
    sent.SubscriberKey,
    sent.EventDate as LatestSend
FROM
    ent._Sent as sent
WHERE 
    sent.OYBAccountID = '[id]'
    AND sent.EventDate = (
        SELECT MAX (latest.EventDate) 
        FROM ent._Sent as latest 
        WHERE latest.SubscriberKey = sent.SubscriberKey
    )
ORDER BY LatestSend ASC

查询2

SELECT top 250000
    sent.SubscriberKey,
    MAX(sent.EventDate) as LatestSend
FROM
    ent._Sent as sent
WHERE 
    sent.OYBAccountID = '[id]'
GROUP BY
    sent.SubscriberKey
ORDER BY LatestSend ASC

差异原因

核心问题是查询1的子查询中缺失OYBAccountID的关联条件:

  • 查询2逻辑直接:先筛选出当前业务单元的所有发送记录,再按SubscriberKey分组,取每个订阅者在该单元内的最新发送日期,因此能覆盖该业务单元内的所有订阅者。
  • 查询1的子查询未限制OYBAccountID,会去整个ent._Sent表中查找该订阅者的全局最新发送日期。如果某个订阅者在其他业务单元有比当前单元内记录更新的发送记录,那么当前单元内的EventDate就不等于这个全局最大值,这条记录会被过滤;只有当订阅者在当前单元的发送记录就是他的全局最新记录时,才会被查询1返回。这就导致查询1漏掉了部分订阅者,记录数比查询2少。

修正后的查询1

在子查询中加入OYBAccountID的过滤条件,确保子查询只在当前业务单元内找最新记录:

SELECT top 250000
    sent.SubscriberKey,
    sent.EventDate as LatestSend
FROM
    ent._Sent as sent
WHERE 
    sent.OYBAccountID = '[id]'
    AND sent.EventDate = (
        SELECT MAX (latest.EventDate) 
        FROM ent._Sent as latest 
        WHERE latest.SubscriberKey = sent.SubscriberKey
        AND latest.OYBAccountID = sent.OYBAccountID -- 新增此条件
    )
ORDER BY LatestSend ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:05:10