当日期和 doc_Types 相等时对表执行自联接
Posted
技术标签:
【中文标题】当日期和 doc_Types 相等时对表执行自联接【英文标题】:Perform self join on a table when dates and doc_Types are equal 【发布时间】:2019-05-31 02:38:40 【问题描述】:我想在某一天将相同的 doc_type 组合在一起。例如,如果 '1099' doc_type 在 2018 年 12 月 12 日被分类两次。我想将它们计数两次并将频率显示为2。
这是我的查询。我应该在 WHEN doc_type 和 date 相等的条件下对表执行自联接吗?
SELECT cast(date_parse(date_time, '%Y/%m/%d %H:%i:%s') AS date) AS Date
, json_array_get (doc_type, 0) AS doc_type
, COUNT(DISTINCT doc_type) as Frequency
FROM "reports"."dev_operator_logs"
WHERE doc_type IS NOT NULL
GROUP BY date_time, doc_type
ORDER BY date_time;
【问题讨论】:
嗨 :) 您能否提供一个架构和更多详细信息?对于查询本身,这可能要归功于 date 上的 group by 子句和具有 count(*) > 1 ^^ 的 doc_type 但我只能提供更详细的真实答案:)Date Frequency doc_type --------------------------------------------- 2018-12-03 1 BankStatement 2018-12-12 1 Checklist 2018-12-12 1 1099 2018-12-12 1 1099 2018-12-12 1 Note 2018-12-12 1 Ammendatory clause 2018-12-12 1 Note 2018-12-12 1 Ammendatory clause
我已经添加了带有问题的表格图像。请点击问题下方的链接。
我想在表上进行自连接,条件是当日期和文档类型相等时,相应地增加频率。
select * from (SELECT cast(date_parse(date_time, '%Y/%m/%d %H:%i:%s') AS date) as date, json_array_get (doc_type, 0) AS doc_type, COUNT(DISTINCT doc_type) as Frequency FROM "reports"."dev_operator_logs" GROUP BY date_time, doc_type ORDER BY date_time) WHERE doc_type IS NOT NULL;
【参考方案1】:
也许您只想按date
而不是datetime
分组并删除doc_type
?
SELECT cast(date_parse(date_time, '%Y/%m/%d') AS date) AS Date,
json_array_get(doc_type, 0) AS doc_type,
COUNT(DISTINCT doc_type) as Frequency
FROM "reports"."dev_operator_logs"
WHERE doc_type IS NOT NULL
GROUP BY cast(date_parse(date_time, '%Y/%m/%d') AS date)
ORDER BY cast(date_parse(date_time, '%Y/%m/%d') AS date);
【讨论】:
这个查询产生的结果和我的一样。 拥有 count(*) 似乎没有任何改变。以上是关于当日期和 doc_Types 相等时对表执行自联接的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法改变这个 BigQuery 自联接以使用窗口函数?