-1

这是我当前的 postgres 查询:

    sql = """
    SELECT
        vms.campaign_id,
        avg(vms.open_rate_uplift) as open_rate_average,
        avg(vms.click_rate_uplift) as click_rate_average,
        avg(vms.conversion_rate_uplift) as conversion_rate_average,
        avg(cms.incremental_opens),
        avg(cms.incremental_clicks),
        avg(cms.incremental_conversions)
    FROM
        experiments.variant_metric_snapshot vms
    INNER JOIN experiments.campaign_metric_snapshot cms ON vms.campaign_id = cms.campaign_id 
    WHERE 
        vms.campaign_id IN %(campaign_ids)s 
    GROUP BY
        vms.campaign_id
    """

借此,我从 cms 表中获得每个广告系列组的平均增量打开次数、增量点击次数和增量转换次数。但是,我想要 3 个字段的最新值,而不是平均值。请参阅下面的 cms 表屏幕截图 - 我想要给定组的具有最大(即最近)event_id(而不是所有记录的平均值)的记录中的值)。

我怎样才能做到这一点?谢谢

在此处输入图像描述

4

2 回答 2

0

听起来您想要横向连接。

FROM
experiments.variant_metric_snapshot vms
CROSS JOIN LATERAL (select * from experiments.campaign_metric_snapshot cms where vms.campaign_id = cms.campaign_id order by event_id desc LIMIT 1) cms
WHERE...
于 2022-02-23T17:06:15.717 回答
0

如果您追求快速而肮脏的解决方案,您可以使用array_agg对查询进行最小更改的函数。

SELECT
        vms.campaign_id,
        avg(vms.open_rate_uplift) as open_rate_average,
        avg(vms.click_rate_uplift) as click_rate_average,
        avg(vms.conversion_rate_uplift) as conversion_rate_average,
        (array_agg(cms.incremental_opens ORDER BY cms.event_id DESC))[1] AS incremental_opens,
        ..
FROM
        experiments.variant_metric_snapshot vms
INNER JOIN experiments.campaign_metric_snapshot cms ON vms.campaign_id = cms.campaign_id 
WHERE 
        vms.campaign_id IN %(campaign_ids)s 
GROUP BY
        vms.campaign_id;
于 2022-02-23T17:29:50.587 回答