hql面试题之上海某资深数仓开发工程师面试题-求不连续月份的月平均值

1.题目

A,B两组产品的月平均值,月平均值是当月的前三个月值的一个平均值,注意月份是不连续的,如果当月的前面的月份不存在,则为0。如A组2023-04的月平均值为2023年1月的数据加2023-02月的数据的平均值,因为没有其他月份则需要再加一个0,再求平均值。要求:求出每个月的月平均值。

'A','2023-01',3030

'A','2023-02',5464

'A','2023-04',5467

'A','2023-05',4646

'A','2023-06',8546

'B','2022-01',9846

'B','2022-02',1562

'B','2022-03',2733

'B','2022-05',8833

'B','2022-06',8787

2.建表

sql 复制代码
create table if not exists non_continuous_time(
product string comment '产品号',
pro_time string comment '时间',
pro_values int comment '值'
)comment '非连续时间表'
sql 复制代码
insert into non_continuous_time values
('A','2023-01',3030),
('A','2023-02',5464),
('A','2023-04',5467),
('A','2023-05',4646),
('A','2023-06',8546),
('B','2022-01',9846),
('B','2022-02',1562),
('B','2022-03',2733),
('B','2022-05',8833),
('B','2022-06',8787)

3.思路

使用lag窗口函数,lag的偏移量可以锁定前三个月的数据,没有的显示为0;

sql 复制代码
select 
   product,
   pro_time,
   pro_values,
   coalesce(lag(pro_values,1) over(partition by product order by pro_time),0) lg_one,
   coalesce(lag(pro_values,2) over(partition by product ORDER BY pro_time),0) lg_two,
   coalesce(lag(pro_values,3) over(partition by product ORDER BY pro_time),0) lg_thr
from non_continuous_time

最终结果:

sql 复制代码
select
    a.product,
    a.pro_time,
   (lg_one+lg_two+lg_thr)/3  sum_values
from
(
select 
   product,
   pro_time,
   pro_values,
   coalesce(lag(pro_values,1) over(partition by product order by pro_time),0) lg_one,
   coalesce(lag(pro_values,2) over(partition by product ORDER BY pro_time),0) lg_two,
   coalesce(lag(pro_values,3) over(partition by product ORDER BY pro_time),0) lg_thr
from non_continuous_time
)a
相关推荐
HalvmånEver4 小时前
MySQL的增删改查命令合集合集
数据库·sql·oracle
不剪发的Tony老师5 小时前
dblab:一款基于终端的交互式数据库客户端
数据库·sql
运维小子7 小时前
JumpServer Applet 发布自定义远程应用:Oracle SQL Developer 自动登录
数据库·sql·oracle·jumpserver
上海云盾商务经理杨杨10 小时前
Web渗透核心漏洞:SQL注入漏洞测试与修复实战
数据库·sql·安全
Irene199111 小时前
(课堂笔记)游标与动态SQL(EXECUTE IMMEDIATE):使用 CHR(39) 替代拼接单引号
sql
消失的旧时光-194311 小时前
SQL 第四篇:JOIN 实战(数据库到底是怎么“拼表”的)
数据库·sql·mysql
秋914 小时前
MySQL 8.0.46 与 MySQL 9.7.0在sql语句方面的区别并举例说明
数据库·sql·mysql
Irene199118 小时前
PL/SQL:异常处理补充
数据库·sql
Elastic 中国社区官方博客18 小时前
从平均值到任意百分位数:Elasticsearch 在 ES|QL 中原生支持指数直方图
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索·prometheus
今儿敲了吗18 小时前
数据库(四)——关系数据库SQL语言
数据库·笔记·sql