需要取最近的非空值

一、应用场景

节点字段可能是空值,且也会更新,需要取最近的非空值。需要对时间从大到小排列,但是可能最新时间那一行的节点值是空,比如实际的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

 

posted @ 2024-08-11 00:35  微风徐徐$  阅读(22)  评论(0编辑  收藏  举报