[英]Postgres SUM over given time
我正在嘗試使用 Postgres 在給定時間內對谷歌分析數據求和。 我不太確定如何解決分組問題。 您在下面看到的查詢每天返回一列。 我想總結給定日期內的所有點擊次數。 因此,查詢應為每個廣告系列返回 1 行,每行有一列指示點擊次數。
SELECT
sa.id AS salesforce_account_id,
acp.campaignid,
acp.campaignname,
date,
SUM(clicks) as clicks
FROM
adwords_campaign_performance acp
INNER JOIN salesforce_account sa ON
sa.adwords_id = acp.adwords_customerid
WHERE acp.date >= '2020-10-01'
AND acp.date <= '2020-10-03'
GROUP BY sa.id, acp.campaignid, acp.campaignname, date
我可以編寫查詢,使其返回整個月的數字,如下所示:
SELECT
sa.id AS salesforce_account_id,
acp.campaignid,
acp.campaignname,
date_trunc('month', date) AS MONTH,
SUM(clicks) as clicks
FROM
adwords_campaign_performance acp
INNER JOIN salesforce_account sa ON
sa.adwords_id = acp.adwords_customerid
WHERE MONTH = '2020-10-01 00:00:00'
AND sa.id = 3148
GROUP BY sa.id, acp.campaignid, acp.campaignname, MONTH
任何幫助將不勝感激。 謝謝!
您在下面看到的查詢每天返回一列。 我想總結給定日期內的所有點擊次數。 因此,查詢應為每個廣告系列返回 1 行,每行有一列指示點擊次數。
因此,只需從select
和group by
子句中刪除date
:
SELECT
sa.id AS salesforce_account_id,
acp.campaignid,
acp.campaignname,
SUM(clicks) as clicks
FROM adwords_campaign_performance acp
INNER JOIN salesforce_account sa ON sa.adwords_id = acp.adwords_customerid
WHERE acp.date >= '2020-10-01'
AND acp.date <= '2020-10-03'
GROUP BY sa.id, acp.campaignid, acp.campaignname
我認為您希望generate_series()
生成一個月中的所有天數:
SELECT gs.date, sa.id AS salesforce_account_id, acp.campaignid, acp.campaignname,
SUM(clicks) as clicks
FROM generate_series('2020-10-01'::date, '2020-10-31'::date, interval '1 day') gs(dte) LEFT JOIN
adwords_campaign_performance acp
ON acp.date >= gs.dte AND
acp.date < gs.dte + INTERVAL '1 DAY' LEFT JOIN
salesforce_account sa
ON sa.adwords_id = acp.adwords_customerid
GROUP BY gs.dte, sa.id, acp.campaignid, acp.campaignname, date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.