SQL面试题:按照时间序列补全数据

简介: HiveSQL面试题,根据时间以最新数据补全字段缺失值

题目:给定表t,字段信息如下

date

c1

c2

c3

2022-09-15

AB

12

bc

2022-09-16


23


2022-09-17



d

2022-09-18

BC



问题:如何补全数据,结果如下

date

c1

c2

c3

2022-09-15

AB

12

bc

2022-09-16

AB

23

bc

2022-09-17

AB

23

d

2022-09-18

BC

23

bc

思路:可以对缺失的数据进行分组,组内累加该字段值,但是目前这题不能使用此方法,因为字段值为含有字符串不能直接累加,可以采用分组之后取第一值。


构造数据:使用SQL先构造上述数据

with t as(selectdate,        c1,        c2,        c3
fromvalues('2022-09-15','AB',12,'bc'),('2022-09-16',null,23,null),('2022-09-17',null,null,'d'),('2022-09-18','BC',null,null)               tmp(date,c1,c2,c3))date        c1  c2  c3
2022-09-15  AB  12  bc
2022-09-16  \N  23  \N
2022-09-17  \N  \N  d
2022-09-18  BC  \N  \N


解法一:分组累加思想

selectdate,    first_value(c1) over(partition by flag1 orderbydate) c1,    first_value(c2) over(partition by flag2 orderbydate) c2,    first_value(c3) over(partition by flag3 orderbydate) c3
from(selectdate,        c1,        c2,        c3,        lag_c1,        lag_c2,        lag_c3,        sum(if(c1 isnotnulland lag_c1 isnull,1,0)) over(orderbydate) flag1,        sum(if((c2 isnotnulland lag_c2 isnull)or(c2 isnotnulland lag_c2 isnotnull),1,0)) over(orderbydate) flag2,        sum(if(c3 isnotnulland lag_c3 isnull,1,0)) over(orderbydate) flag3
from(selectdate,            c1,            c2,            c3,            lag(c1,1) over(orderbydate) lag_c1,            lag(c2,1) over(orderbydate) lag_c2,            lag(c3,1) over(orderbydate) lag_c3
from t
) a
) b
date        c1  c2  c3
2022-09-15  AB  12  bc
2022-09-16  AB  23  bc
2022-09-17  AB  23  d
2022-09-18  BC  23  d

解法二:解法一存在特殊情况,比如c2的连续不为空,分组时就得单独考虑,以下这个方法无需考虑改情况且较为巧妙用count代替sum累加

selectdate,  first_value(c1) over(partition by aa orderbydate)as c1,  first_value(c2) over(partition by bb orderbydate)as c2,  first_value(c3) over(partition by cc orderbydate)as c3
from(selectdate,    c1,    c2,    c3,count(c1) over(orderbydate)as aa,count(c2) over(orderbydate)as bb,count(c3) over(orderbydate)as cc
from t
) a;date        c1  c2  c3
2022-09-15  AB  12  bc
2022-09-16  AB  23  bc
2022-09-17  AB  23  d
2022-09-18  BC  23  d

此题应该还有其他解法,欢迎交流

拜了个拜

目录
相关文章
|
23天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL隐式游标:数据的“自动导游”与“轻松之旅”
【4月更文挑战第19天】Oracle PL/SQL中的隐式游标是自动管理的数据导航工具,简化编程工作,尤其适用于简单查询和DML操作。它自动处理数据访问,提供高效、简洁的代码,但不适用于复杂场景。显式游标在需要精细控制时更有优势。了解并适时使用隐式游标,能提升数据处理效率,让开发更加轻松。
|
1天前
|
SQL 关系型数据库 MySQL
|
2天前
|
SQL 数据库
Sql中如何添加数据
Sql中如何添加数据
5 0
|
6天前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
17 1
|
6天前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
|
12天前
|
SQL 机器学习/深度学习 数据采集
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
|
12天前
|
SQL Oracle 关系型数据库
利用 SQL 注入提取数据方法总结
利用 SQL 注入提取数据方法总结
|
13天前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在DataWorks的数据开发模式中,在presql和postsql中支持执行多条SQL语句如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
42 1
|
14天前
|
SQL 机器学习/深度学习 算法
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
|
14天前
|
SQL 机器学习/深度学习 数据挖掘
SQL Server Analysis Services数据挖掘聚类分析职业、地区、餐饮消费水平数据
SQL Server Analysis Services数据挖掘聚类分析职业、地区、餐饮消费水平数据