如何将结果集限制为仅 JOIN 中的最新实例

Posted

技术标签:

【中文标题】如何将结果集限制为仅 JOIN 中的最新实例【英文标题】:How to limit result set to only the latest instance in the JOIN 【发布时间】:2016-10-15 20:09:31 【问题描述】:

我正在创建一个销售渠道报告,其中记录了每个销售人员每周的得失。

该报告在大多数情况下都有效,除了这个让我烦恼的极端案例。通常不会发生这种情况,但如果销售人员将机会转移到获胜状态,然后返回失败状态,然后再次进入获胜状态 - 这将计为 2 次获胜。我正在寻找某种方法来仅从审计(详细信息)表中获取最新行,其中 (a) 日期在上周内,(b) after_value 是输或赢或输值。

我已经尝试在 join 中尽可能多地这样做,如下所示:

           FROM 
            opportunities o ON ao.opportunity_id=o.id
           LEFT JOIN opportunities_audit oa ON o.id=oa.parent_id 
                AND after_value_string IN ('Loss', 'Win') 
                AND date_created > date_sub(now(), INTERVAL 1 WEEK)
           INNER JOIN sweet.users u ON o.assigned_user_id=u.id

但我还没有找到在连接中使用 MAX(id) 之类的方法。我还在 SELECT 中尝试了一个 MAX(id),但我有几个 sum(IF) 语句,我认为必须为每个 sum(IF) 都这样做是没有意义的——而且我想不通无论如何,如何使其仅适用于其中一个。

我继续使用 MAX,或者可能是子查询将表连接到自身并以这种方式获取 MAX(id),但我只是还没弄清楚子查询的放置位置,因为我不希望每个选择使用它。如果这实际上是最好的解决方案。哦,而且,这些表中的 id 看起来像哈希值,所以我不知道 MAX 是否仍然有效。乐叹息。

这只是 SELECT 的一部分,以防万一:

    , sum(IF(o.sales_stage = 'Win'
        AND (o.date_modified > date_sub(now(), INTERVAL 1 WEEK))
            , 1,0))
        AS 'W'

我希望我已经提供了足够的信息,任何方向/建议将不胜感激!

谢谢!

【问题讨论】:

【参考方案1】:

选择前几位|从选择开始的百分比

【讨论】:

以上是关于如何将结果集限制为仅 JOIN 中的最新实例的主要内容,如果未能解决你的问题,请参考以下文章

将三个查询的结果组合成一个数据集 cross Apply 或 join

如何限制 DBeaver 数据编辑器以限制结果集大小?

如何在 postgresql 中使用多个 RETURN QUERY 限制结果集

mysql中inner join和outer join有啥区别?

格式化 LINQ 查询结果集

将 group_concat 的结果集限制为实际结果