如何将结果集限制为仅 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
如何在 postgresql 中使用多个 RETURN QUERY 限制结果集