【问题标题】:BigQuery - Cannot join on repeated fieldBigQuery - 无法加入重复字段
【发布时间】:2016-03-30 06:25:13
【问题描述】:

我正在尝试创建一个 1 列的表,每行是 2 个单独日期之间的新日期。查询工作正常,直到我添加一个包含子查询的 where 子句,即。不在(选择 ....)。如果我执行 NOT IN (TIMESTAMP('xyz')) 之类的操作,它会正常工作。

我不断收到一条错误消息,提示“无法加入重复字段 t2.f0__group.SomeDate”

我不知道为什么会这样。我对 BQ 也很陌生,所以如果有更简单的方法,请告诉我。谢谢

SELECT SomeDate FROM
(
  SELECT DATE_ADD(Day, i, "DAY") SomeDate
  FROM
  (
    SELECT '2020-01-03' Day
  ) T1
  CROSS JOIN
  (
    SELECT
     POSITION(
       SPLIT(
         RPAD('', DATEDIFF('2020-01-30','2020-01-03') * 2, 'a,'))) i 
    FROM
    (
      SELECT NULL
    )
  ) T2
)
WHERE SomeDate NOT IN (SELECT OtherDate FROM 
  (
    SELECT TIMESTAMP('2020-01-04 00:00:00 UTC') AS OtherDate
  ),
  (
    SELECT TIMESTAMP('2020-01-06 00:00:00 UTC') AS OtherDate
  ),
  (
    SELECT TIMESTAMP('2020-01-08 00:00:00 UTC') AS OtherDate
  )
)

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我建议使用以下示例从头开始
    我认为它完全可以通过可能的细微调整来实现您想要实现的目标

    SELECT SomeDate
    FROM (
      SELECT 
        DATE(DATE_ADD(TIMESTAMP('2020-01-03'), pos - 1, "DAY")) AS SomeDate
      FROM (
         SELECT ROW_NUMBER() OVER() AS pos, *
         FROM (FLATTEN((
           SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP('2020-01-30'), TIMESTAMP('2020-01-03')), '.'),'') AS h
           FROM (SELECT NULL)),h
        ))
      )
    ) a
    LEFT JOIN (
    SELECT OtherDate FROM
        (SELECT '2020-01-04' AS OtherDate),
        (SELECT '2020-01-06' AS OtherDate),
        (SELECT '2020-01-08' AS OtherDate)
    ) b
    ON b.OtherDate = a.SomeDate
    WHERE b.OtherDate IS NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2020-06-04
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多