带有月份名称的 SQL 存储结果表

Posted

技术标签:

【中文标题】带有月份名称的 SQL 存储结果表【英文标题】:SQL store results table with month name 【发布时间】: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 中进行查询。

【问题讨论】:

表的名称是什么样的?他们有月份和年份吗? 有一个时间戳字段。架构说它是“时间戳”类型。 【参考方案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 附加到主表时不必调整查询?

以上是关于带有月份名称的 SQL 存储结果表的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句

SQL 在视图中使用交叉引用两个表的结果创建列

SQL SELECT 语句

SQL SELECT 语句

SQL的select语句

SQL基本命令