sql - Redshift FULL OUTER JOIN 不输出 NULL

标签 sql amazon-redshift

我们有一个“数字”表,在其单个值“n”中保存 0-10000 个值。 我们有 tableX ,其中有calculated_at datetime和一个术语。 我们正在尝试填补 tableX 中在给定日期中没有匹配项的漏洞。然而,对于不匹配的情况,这似乎不会产生 NULL 或 0...

select term
     , avg(total::float)
     , date_trunc('day', series.date) as date1
     , date_trunc('day', calculated_at) as date2
from (select 
        (current_timestamp - interval '1 day' * numbers.n)::date as date
      from numbers) as series
full outer join terms
   on series.date = date_trunc('day', calculated_at)
where series.date BETWEEN '2017-07-01' AND '2017-07-30'
AND (term in ('term111') or term is null)
group by term
       , date_trunc('day', series.date)
       , date_trunc('day', calculated_at)
 order by date_trunc('day', series.date) asc

最佳答案

完全外连接很好。问题出在过滤器上。对于完全外连接来说,这些确实很棘手。我建议:

select t.term, avg(total::float),
       date_trunc('day', series.date) as date1,
       date_trunc('day', calculated_at) as date2
from (select (current_timestamp - interval '1 day' * numbers.n)::date as date
      from numbers
      where (current_timestamp - interval '1 day' * numbers.n)::date BETWEEN '2017-07-01' AND '2017-07-30'
     ) series full outer join
     (select t.*
      from terms
      where term = 'term111'
     ) t
     on series.date = date_trunc('day', t.calculated_at)
group by t.term, date_trunc('day', series.date), date_trunc('day', calculated_at)
 order by date_trunc('day', series.date) asc;

我的猜测是,左连接会做你想要的。我怀疑完全外连接是您真正想要的。如果您有疑问,请提出另一个问题并提供示例数据和所需结果。

关于sql - Redshift FULL OUTER JOIN 不输出 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44951284/

相关文章:

hadoop - 分析 S3 上的大量 JSON 文件

sql - MYSQL获取结果数量

sql - 如何更新 SQL Server 中列的偏移量?

amazon-web-services - 从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败

sql - redshift 无法识别的节点类型 407

postgresql - RedShift - 带换行符的 CSV 加载

sql - 使用 Redshift 转换日期

c# - 如何将 SQL 结果转换为 C# 中的对象列表?

mysql - 只用一张 table 检查可用时间?

php - 将 HTML 保存到数据库/SQL 中