I';我试图用sql计算两年中两个相同日期之间的差异

I';我试图用sql计算两年中两个相同日期之间的差异,sql,google-bigquery,bigquery-standard-sql,Sql,Google Bigquery,Bigquery Standard Sql,我会尽量简单,把我的问题说清楚。我在BigQuery上有一个名为“fb_广告”的表格(关于美国不同商店的不同facebook公司),它包含以下列: 商店:商店名称 点击次数:点击次数 印象:广告的印象数 成本:广告成本 日期:AAAA-MM-DD 频率:商店的访客人数 所以,我试图计算2017年和2018年之间的差异 以下是我试图计算的方差: Variance_Of_Frequency = ((Frequency in 2018 at date X) - ((Frequency in 201

我会尽量简单,把我的问题说清楚。我在BigQuery上有一个名为“fb_广告”的表格(关于美国不同商店的不同facebook公司),它包含以下列:

  • 商店:商店名称
  • 点击次数:点击次数
  • 印象:广告的印象数
  • 成本:广告成本
  • 日期:AAAA-MM-DD
  • 频率:商店的访客人数
所以,我试图计算2017年和2018年之间的差异

以下是我试图计算的方差:

Variance_Of_Frequency = ((Frequency in 2018 at date X) - ((Frequency in 2017 at date X))/((Frequency in 2017 at date X)
问题是,我必须将一周中的同一天与日期X进行比较

例如,如果我在2017年8月13日星期一有一个compaign跑步,我需要与2018年8月13日附近的另一个星期一进行比较(例如,可能是2018年8月15日的星期一)

这是每天的变化

我试着每周计算一次方差,但我不知道它是否正确,下面是我如何做到的:

首先,我使用以下查询将每日表聚合到每周表:

创建我的每周工作表 然后我尝试使用以下公式计算方差:

SELECT
  base.*, (base.frequency-lw.frequency) / lw.frequency as VAR_FF
FROM
  `weekly_table` base
JOIN (
  SELECT
    * EXCEPT (date),
    DATE_ADD(DATE(TIMESTAMP(date)) , INTERVAL 1 Week)AS date
  FROM
    `weekly_table` ) lw
ON
  base.date = lw.date
  AND base.store= lw.store
有人知道如何做日常工作,或者我每周的询问是否正确吗


谢谢

对于给定日期,您希望知道下一年中与同一日期最近的星期一的日期

SET @dt = '2017-08-17';
SELECT CASE WHEN WEEKDAY(@dt + INTERVAL 1 YEAR) > 3 
            THEN ADDDATE(ADDDATE(@dt + INTERVAL 1 YEAR,INTERVAL 1 WEEK),INTERVAL - WEEKDAY(@dt + INTERVAL 1 YEAR) DAY) 
            ELSE ADDDATE(@dt + INTERVAL 1 YEAR,INTERVAL - WEEKDAY(@dt + INTERVAL 1 YEAR) DAY)
            END x;

显然,我可以通过以这种方式定义@dt来删除所有这些
+间隔1年的
位。

对于给定的日期,您想知道下一年中最接近同一日期的星期一的日期

SET @dt = '2017-08-17';
SELECT CASE WHEN WEEKDAY(@dt + INTERVAL 1 YEAR) > 3 
            THEN ADDDATE(ADDDATE(@dt + INTERVAL 1 YEAR,INTERVAL 1 WEEK),INTERVAL - WEEKDAY(@dt + INTERVAL 1 YEAR) DAY) 
            ELSE ADDDATE(@dt + INTERVAL 1 YEAR,INTERVAL - WEEKDAY(@dt + INTERVAL 1 YEAR) DAY)
            END x;

显然,我可以通过这样定义@dt来删除所有
+间隔1年
位。

如果您在
日期添加(t1.DATE,INTERVAL 1 YEAR)=t2.DATE进行自加入和匹配,那么基于周的组是否能让您接近您想要的位置?不要把日期当作字符串,否则会出问题的。样本输入和输出数据将大有帮助。2017-08-13是一个星期五。2018-08-13是一个星期一:-(@草莓,我只是猜哈哈哈..只是为了说明我在寻找什么xD@danblack,我相信我的第二个问题是计算两周(一周和下一周)之间的差异(方差),而不是不同年份的两周:(!对第一个问题有什么提示吗?这里有一个看起来几乎相同的问题,但这家伙使用了两个不同的表,似乎对我不起作用!链接:对于您建议的解决方案,我相信增加一年不会给我们一周中的同一天!如果您在
DATE\u ADD(t1.DATE,INTERVAL 1 year)上自行加入并匹配=t2.date
基于周的分组是否能让你接近你想要的位置?不要将日期视为字符串-有些事情会出错。样本输入和输出数据会有很大帮助。2017-08-13是星期五。2018-08-13是星期一:-(@草莓,我刚刚猜到了哈哈哈..只是为了说明我在找什么xD@danblack,我相信我的第二个问题是计算两周(一周和下一周)之间的差异(方差),而不是不同年份的两周:(!有关于第一个问题的任何提示吗?这里有一个看起来几乎相同的问题,但这家伙使用了两个不同的表,似乎对我不起作用!链接:对于你建议的解决方案,我相信增加一年不会给我们一周中的同一天!