我们有一个“数字”表,在其单个值“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/