【问题标题】:Automatically add date for each day in SQL在 SQL 中自动添加每一天的日期
【发布时间】:2020-09-01 08:32:54
【问题描述】:

我正在使用 BigQuery 并使用多个表创建了一个视图。每天的数据都需要与多个平台同步。我需要通过 SQL 插入日期或其他字段,通过这些字段我可以确定每天将哪些行添加到视图中或更新了哪些行,以便我每天可以转发这些数据,而不是每天同步所有数据。我能想到的最好方法是以某种方式添加当前日期,只要发生对行的更新,但该日期需要保持不变,直到该记录发生进一步更新。

例如: Sample data

假设我们在 9 月 1 日获得视图 T1,在 2 日获得视图 T2。我只需要在 9 月 1 日发现 ID:2,在 9 月 2 日发现 ID:3、4、5。注意:没有这样的日期列。我需要帮助来创建这样的列或任何其他方法来验证每天更新/添加哪些行

【问题讨论】:

  • 您能提供一些示例数据和预期输出吗?
  • 嗨 Sujit,我添加了一个示例。请验证并查看是否澄清
  • 这通常通过表上的分区键来处理。

标签: sql date google-bigquery


【解决方案1】:

您可以使用以下 INSERT 语句创建BigQuery schedule queries,频率为每天(24 小时):

INSERT INTO dataset.T1
SELECT
  *
FROM
  dataset.T2
WHERE
  date > (SELECT MAX(date) FROM dataset.T1);

【讨论】:

    【解决方案2】:

    需要将数据流式传输到的表(在您的情况下为示例数据)配置为分区表。因此,您使用“按摄取时间分区”,这样您就不需要自己处理日期。 Configuration in BQ

    在重新创建该表后,借助 BQ(附加)和 RUN 中的格式选项将现有数据附加到该新表中。

    然后根据该表创建一个视图:

    SELECT * EXCEPT (rank)
    FROM (
      SELECT
        *,
        ROW_NUMBER() OVER (GROUP BY invoice_id ORDER BY _PARTITIONTIME desc) AS rank
      FROM `your_dataset.your_sample_data_table`
    )
    WHERE rank = 1
    

    始终使用从那以后的视图。

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多