当日期和 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 自联接以使用窗口函数?

Pyspark 自联接错误“缺少已解决的属性”

Spring Boot JPA:在自联接关系中的 JSON 视图上递归

选择 3 行包含不同值的列 - 自联接?

查看在表上具有自联接