Presto SQL-按所有日期/组组合展开

时间:2018-08-08 15:40:02

标签: sql presto

我有一个包含日期,组和值的表:

date         group   subgroup value
2018-01-01   A       1        20
2018-01-04   A       1        70
2018-01-06   A       1        80

我想这样填写组/子组组合所缺少的日期:

date         group   subgroup value
2018-01-01   A       1        20
2018-01-02   A       1        0
2018-01-03   A       1        0
2018-01-04   A       1        70
2018-01-05   A       1        0
2018-01-06   A       1        80

执行此操作的一种方法是通过交叉连接到具有日期序列的表,然后再将其保留回原始表,但是,由于许多组合都有不同的组合,因此我想避免这样做最小和最大日期,这种类型的解决方案会“表现不佳”。

1 个答案:

答案 0 :(得分:3)

如果您希望每个组/子组组合使用不同的顺序,那么这很棘手。

但是,在PrestoDB中,您可以使用sequence()unnest(),它们几乎和generate_series()一样方便(好的,不是真的,但是它们做同样的事情)。

查询如下:

select gs.group, gs.subgroup, d.dte, coalesce(t.value, 0)
from (select group, subgroup, min(date) as mind, max(date) as maxd,
             sequence(min(date), max(date)) as date_arr
      from t
      group by group, subgroup
     ) gs cross join
     unnest(date_arr) d(dte) left join
     t
     on t.group = gs.grp and t.subgroup = gs.subgroup and t.date = d.dte
order by gs.group, gs.subgroup, d.dte;