带有月份名称的 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 存储结果表的主要内容,如果未能解决你的问题,请参考以下文章