我有一个表,其中存储销售目标-这些通常按月设置,但按天输入-这意味着每日目标是月目标除以天数。
这是一种输入目标的劳动密集型方法,因此我要重新创建具有开始日期和结束日期的表:
WITH targets AS (
SELECT DATE '2018-01-01' AS dateStart, DATE '2018-01-31' AS dateEnd, 'uk' AS market, NUMERIC '1550' AS quantity
UNION ALL SELECT '2018-02-01', '2018-02-28', "uk", 560
)
在我的查询中,我需要生成一个日期数组(
dateStart
到
dateEnd
,然后对于数组中的每个日期,应用市场并将目标除以数组中的日期数-但我无法使其正常工作。我想做的是:
SELECT
*,
(SELECT market FROM targets WHERE dr IN GENERATE_DATE_ARRAY(targets.dateStart, targets.dateEnd, INTERVAL 1 DAY)) AS market,
(SELECT SAFE_DIVIDE(budget, COUNT(GENERATE_DATE_ARRAY(targets.dateStart, targets.dateEnd, INTERVAL 1 DAY)) FROM targets WHERE dr IN GENERATE_DATE_ARRAY(targets.dateStart, targets.dateEnd, INTERVAL 1 DAY)) AND targets.market = market AS budget
FROM UNNEST(GENERATE_DATE_ARRAY(targets.dateStart, targets.dateEnd, INTERVAL 1 DAY)) AS dr
这意味着更少的数据输入和更少的行在源表中(这是一个google表,所以最终将达到限制)。谢谢你的帮助。