【问题标题】:SQL store results table with month name带有月份名称的 SQL 存储结果表
【发布时间】:2019-03-09 02:26:13
【问题描述】:

我存储了几个 CSV 文件以供查询。每个 CSV 代表一个月的数据。我想计算每个 CSV 中的所有记录,并将该数据作为表中的一行保存到表中。例如,代表 May 的表应该返回如下所示的内容,然后是 June。数据从 2018 年 2 月开始并持续到 2019 年 2 月,因此也需要年值。

Month    Results
----------------
May 18     1170
June 18    1167

为了提高效率,我想对所有表运行相同的查询。我还希望查询与所有未来的更新一起使用,例如。添加了 3 月 19 日的表,查询仍然有效。

到目前为止,我有这个查询。

SELECT COUNT(*)
FROM `months_data.*`

我正在使用标准 SQL 在 Google Big Query 中进行查询。

【问题讨论】:

  • 表的名称是什么样的?他们有月份和年份吗?
  • 有一个时间戳字段。架构说它是“时间戳”类型。

标签: sql google-bigquery


【解决方案1】:

听起来您只需要一个统计每个月的行数的聚合:

SELECT
  DATE_TRUNC(DATE(timestamp), MONTH) AS Month,
  COUNT(*) AS Results
FROM `dataset.*`
GROUP BY month
ORDER BY month

如果你想控制格式,你可以使用DATE_FORMAT function

【讨论】:

    【解决方案2】:

    你好像需要union all:

    select 2018 as yyyy, 2 as mm, count(*) as num
    from feb2018
    union all
    select 2018 as yyyy, 3 as mm, count(*)
    from mar2018
    union all
    . . .
    

    请注意,您的数据模型很差。您应该将所有数据存储在带有日期列的单个表中。

    【讨论】:

    • 有一个时间戳字段,类型为“timestamp”。从文档中似乎有可以提取月份和年份的方法。合并单独的 CSV 是微不足道的。如果我做了一个联合并使用时间戳字段,那么一般查询会是什么,以便在将新的 CSV 附加到主表时不必调整查询?
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多