需要取最近的非空值
一、应用场景
节点字段可能是空值,且也会更新,需要取最近的非空值。需要对时间从大到小排列,但是可能最新时间那一行的节点值是空,比如实际的2022-03-20那一条空节点就不能当作最新节点,而是2022-03-12那一条的B节点 。所以需要使用concat(时间,节点),如果节点是空值,合并后的数据也是空值,降序排列会将其排到非空值后面,这样就实现空值排到后面;非空值先对时间进行排序,再使用聚合函数的first_value取第一个值。
二、数据集准备
1、sqlcmd创建test表
sqlcmd -S 192.168.118.129 -U sa //sqlcmd连接到mssql数据库 1> create database chenmu //创建chenmu数据库 2> go 1> use chenmu //使用chenmu数据库 2> go Changed database context to 'chenmu'. //切换到改数据库 1> create table test( 2> cate varchar(10), 3> test_date date, 4> node varchar(2) 5> ); 6> go //创建test表,如果输入错误可输入:RESET清空再重新输入 1> select * from test; //查询表数据 2> go cate test_date node ---------- ---------------- ---- (0 rows affected)
2、sqlcmd将数据导入表里
使用BULK INSERT来导入数据,text.txt数据如下,上传到/root下(因为mssql安装到linux下了)。
"cate","test_date","node
"实际","2022-02-15","A"
"实际","2022-02-22"
"实际","2022-03-12","B"
"实际","2022-03-20"
"目标","2022-01-10","B"
"目标","2022-02-23"
"目标","2022-03-05"
"目标","2022-03-20","C"
创建脚本文件test.sql如下,上传到/root下
BULK INSERT chenmu.dbo.test FROM '/root/test.txt' WITH ( FIELDTERMINATOR = ',', -- 定界符,例如逗号 ROWTERMINATOR = '\n', -- 行终止符,例如换行 FIRSTROW = 2 -- 如果 TXT 文件包含标题行,从第二行开始读取数据 );
执行sqlcmd命令将数据导入数据库,报错说文件不存在或者没有文件访问权限。
sqlcmd -S localhost -d chenmu -U sa -i /root/test.sql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下