edit:
Хорошо, только что посмотрел вашу таблицу. Я думаю, что код, который вы пробовали, должен работать с небольшой модификацией. Будет ли это работать?
WITH
data AS(
SELECT
Date,
Device_type,
CASE
WHEN REGEXP_CONTAINS(Insertion_order,'.*Prospecting.*') THEN 'Prospecting'
WHEN REGEXP_CONTAINS(Insertion_order,'.*Retargeting.*') THEN 'Retargeting'
WHEN REGEXP_CONTAINS(Insertion_order,'.*Similar.*') THEN 'Similar Audience'
END
AS Strategy,
ROUND(SUM(Total_media_cost__Advertiser_),2) AS Cost,
SUM(Counter) AS Clicks,
ROUND(CASE
WHEN SUM(Counter) > 0 THEN SUM( Total_media_cost__Advertiser_) / SUM(Counter)
ELSE 0
END
,2) AS CPC,
FROM
`data.data`
GROUP BY
Date,
Device_type,
Strategy),
AggregateData as
(
SELECT
Date,
Device_type,
Strategy,
SUM(Cost) AS Cost,
SUM(Clicks) AS Clicks,
SUM(CPC) AS CPC,
FROM
data
GROUP BY
Date,
Device_type,
Strategy
)
SELECT
*,
safe_divide(SUM(Cost) OVER (ORDER BY Date) , SUM(Clicks) OVER (ORDER BY Date)) as RollingCPC
FROM
AggregateData
Я никогда не пробовал делить скользящие суммы, но это должно работать.
старый ответ
I Я не уверен, что это то, что вы ищете, но вы можете попробовать добавить следующее:
SUM(CPC) OVER(PARTITION BY Device_type, Strategy ORDER BY Date) AS RollingCPC