我正在创建一个销售渠道报告,在该报告中,我为每个销售人员每周捕获获利和损失。如何将结果集限制为JOIN中的最新实例
该报告适用于大多数情况,除了这个让我感到不安的角落案例。这通常不会发生,但是如果销售人员将机会转移到赢取状态,然后又回到亏损状态,然后再次变为赢取状态 - 则它将计为2胜。我正在寻找一些方法,只从审计(明细)表中获取最新的行,其中(a)日期在上周内,(b)after_value是损失或赢或损值。
我曾试图这样做尽可能的加入,就像这样:
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)语句,我不认为必须为每个总和(IF)做它是有意义的 - 加上我无法弄清楚无论如何,如何让它只适用于其中的一种。
我继续去MAX,或者可能是一个子查询来加入表本身,并获得最大(ID)的方式,但我只是没有想出在哪里把子查询,因为我不想每个SELECT都使用它。如果这实际上甚至是最好的解决方案。哦,而且,这些表中的id看起来像散列值,所以我不知道MAX是否会工作。勒叹。
这里的仅仅是选择的一部分,在情况下,它可以帮助:
, sum(IF(o.sales_stage = 'Win'
AND (o.date_modified > date_sub(now(), INTERVAL 1 WEEK))
, 1,0))
AS 'W'
我希望我已经给了足够的信息,任何方向/建议,将不胜感激!
谢谢!