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

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

拜了个拜

目录
相关文章
|
14天前
|
SQL 安全 数据处理
揭秘数据脱敏神器:Flink SQL的神秘力量,守护你的数据宝藏!
【9月更文挑战第7天】在大数据时代,数据管理和处理尤为重要,尤其在保障数据安全与隐私方面。本文探讨如何利用Flink SQL实现数据脱敏,为实时数据处理提供有效的隐私保护方案。数据脱敏涉及在处理、存储或传输前对敏感数据进行加密、遮蔽或替换,以遵守数据保护法规(如GDPR)。Flink SQL通过内置函数和表达式支持这一过程。
38 2
|
20天前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `<rest>` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
30 0
|
20天前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
40 0
|
20天前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
36 0
|
20天前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
29 0
|
20天前
|
测试技术 Java
揭秘Struts 2测试的秘密:如何打造无懈可击的Web应用?
【8月更文挑战第31天】在软件开发中,确保代码质量的关键在于全面测试。对于基于Struts 2框架的应用,结合单元测试与集成测试是一种有效的策略。单元测试聚焦于独立组件的功能验证,如Action类的执行逻辑;而集成测试则关注组件间的交互,确保框架各部分协同工作。使用JUnit进行单元测试,可通过简单示例验证Action类的返回值;利用Struts 2 Testing插件进行集成测试,则可模拟HTTP请求,确保Action方法正确处理请求并返回预期结果。这种结合测试的方法不仅提高了代码质量和可靠性,还保证了系统各部分按需协作。
9 0
|
21天前
|
SQL 数据管理 数据库
SQL中外键:维护数据完整性的关键
【8月更文挑战第31天】
37 0
|
21天前
|
SQL 数据管理 关系型数据库
SQL分区表技术的奥秘:如何用分区策略让你的大规模数据飞起来?
【8月更文挑战第31天】在现代软件开发中,处理大规模数据是常见挑战,而SQL分区表技术提供了一种高效的解决方案。本文详细介绍了SQL分区表的概念、类型(范围、列表、哈希和键分区)及其创建与维护方法,并通过示例代码展示了如何添加、删除和重组分区。遵循了解查询模式、定期维护分区及使用数据库性能工具等最佳实践,可以帮助开发者更高效地进行数据管理。随着SQL生态的发展,分区表技术将在未来发挥更大作用。
23 0
|
21天前
|
机器学习/深度学习 SQL 数据采集
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
24 0