我有一张这样的表
ts itemA itemB itemC
2018-02-03 12:00:00 1 null null
2018-02-03 12:00:00 null 2 6
2018-02-03 12:00:00 null 2 4
2018-02-03 12:01:00 null 3 6
2018-02-03 12:01:00 null 2 4
希望输出看起来像
ts itemA itemB itemC
2018-02-03 12:00:00 1 2 5
2018-02-03 12:01:00 null 3 6
2018-02-03 12:01:00 null 2 4
我尝试按时间分组使用& itemB,得到itemC的平均值。 但无法弄清楚如何组合空项目
select ts, mode() within group (order by itemA), itemB, avg(itemC) group by ts, itemB;
答案 0 :(得分:0)
我想你可能想要:
SELECT ts,
MAX(IFNULL(itemA, 0)) AS itemA,
IFNULL(itemB, 0) AS itemB,
AVG(itemC)
FROM t
GROUP BY ts, IFNULL(itemB, 0)
答案 1 :(得分:0)
您需要从聚合中删除itemB
。也许:
select ts, mode() within group (order by itemA) as itemA,
max(itemB) as itemB, avg(itemC) as itemC
from t
group by ts;
编辑:
正式地,你可以这样做:
select ts, mode() within group (order by itemA) as itemA,
itemBB, avg(itemC) as itemC
from (select t.*, coalesce(itemB, max(itemB) over (partition by ts)) as itemBB,
from t
) t
group by ts, itemBB;
这适用于您的示例数据,但我不确定这是您真正想要的逻辑。