栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

继续使用现有表,直到月底为止包含预测数据并每天更新

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

继续使用现有表,直到月底为止包含预测数据并每天更新

我找到了解决问题的方法。(尽管它可能不是最复杂的一种)

我现在想出了3个新表:

  1. 提供过去和将来的日期,这就是为什么我称其为“日历”
  2. 提供当月的收入数据。我每天都使用计划查询覆盖该表,该查询提供了实际的过去数据和预测的未来数据(基于当月的实际数据),直到当前月末。
  3. 提供过去的数据(回溯的时间比当月还长),再加上2中的每日更新数据。我也使用预定
    MERGE
    查询。

以下是各个查询:

1)

SELECt  *FROM  UNNEST(GENERATE_DATE_ARRAY('2018-01-01', '2030-12-31', INTERVAL 1 DAY)) AS calendar_dateWITHOFFSET  ASOFFSETORDER BYOFFSET

2)

SELECt  date,  'actual' AS type,  ROUND(SUM(revenue),2)FROM  `project.dataset.revenue_data` WHERe  EXTRACT(year  FROM    date) = EXTRACT (year  FROM    CURRENT_DATE())  AND EXTRACT(month  FROM    date) = EXTRACT (month  FROM    CURRENT_DATE())GROUP BY  dateUNIOn DISTINCTSELECt  calendar_date,  'forecast',  (  SELECT    ROUND(AVG(revenue_daily),2)  FROM (    SELECt      SUM(revenue) AS revenue_daily    FROM      `project.dataset.revenue_data`    WHERe      EXTRACT(year      FROM        date) = EXTRACT (year      FROM        CURRENT_DATE())      AND EXTRACT(month      FROM        date) = EXTRACT (month      FROM        CURRENT_DATE())    GROUP BY      date    ORDER BY      date) AS average_daily_revenue),FROM  `project.dataset.calendar`WHERe  calendar_date >= CURRENT_DATE()  AND calendar_date <=DATE_SUB(DATE_TRUNC(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), INTERVAL 1 DAY)ORDER BY  date

3)

MERGE  `project.dataset.forecast_table` fUSING  `project.dataset.forecast_month` mON  f.date = m.date  WHEN MATCHED THEN UPDATE SET f.type = m.type, f.revenue = m.revenue  WHEN NOT MATCHED  AND m.date >= CURRENT_DATE() THENINSERT  (date,    type,    revenue)VALUES  (date, type, revenue)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号