当前位置 : 主页 > 编程语言 > 其它开发 >

介绍关于MSSQL当前行中获取到上一行某列值的函数 Coalesce

来源:互联网 收集:自由互联 发布时间:2022-05-30
介绍关于MSSQL当前行中获取到上一行某列值的函数 CoalesceSQL上一行减下一行的写法 记录一个小知识点,在SQLGrid中,在当前行显示上一行某列值的函数** Coalesce **的使用。 显示上一行是有
介绍关于MSSQL当前行中获取到上一行某列值的函数 Coalesce SQL上一行减下一行的写法

记录一个小知识点,在SQLGrid中,在当前行显示上一行某列值的函数** Coalesce **的使用。

显示上一行是有啥子用?

经常有人百度SQL上一行减下一行的写法,但是没几个文章是用最简单直接的方法来使用的,一堆union、零时表啊啥子的,SQL有很好使的自带函数来搞定这个,来看看吧!

比如你有下面的一串数据

时间(CollectTime) 读数(Value) 2022-04-14 22:05:07.000 259 2022-04-13 22:05:07.000 258 2022-04-12 22:05:07.000 257 2022-04-11 22:05:07.000 256 2022-04-10 22:05:07.000 255 2022-04-09 22:05:07.000 254

此时的SQL可能是这样的

SELECT CollectTime,Value FROM DinData

现在你有一个分析场景,需要计算每次读数的间隔值,这个时候你要是能形成下面的Grid数据,那计算这个值就是个减法了。

时间(CollectTime) 读数(Value) 上次读数(LastValue) 2022-04-14 22:05:07.000 259 258 2022-04-13 22:05:07.000 258 257 2022-04-12 22:05:07.000 257 256 2022-04-11 22:05:07.000 256 255 2022-04-10 22:05:07.000 255 254 2022-04-09 22:05:07.000 254 253

Coalesce 函数就可以干这个事!

下面的这个SQL怎么写呢?

Coalesce 格式是这样的

Coalesce(lag(Value) over(ORDER BY,CollectTime),Value)

总结就是:做下排序,定下上下行怎么取的顺序,设置下要展示的是上下行中的那个字段

最后的SQL:
SELECT CollectTime,Value,Coalesce(lag(Value) over(ORDER BY,CollectTime),Value) AS LastValue FROM DinData

此时就可以计算 差值啊之类的了

时间(CollectTime) 读数(Value) 上次读数(LastValue) 差值(DinValue) 2022-04-14 22:05:07.000 259 258 1 2022-04-13 22:05:07.000 258 257 1 2022-04-12 22:05:07.000 257 256 1 2022-04-11 22:05:07.000 256 255 1 2022-04-10 22:05:07.000 255 254 1 2022-04-09 22:05:07.000 254 253 1 在时间轴上留下点什么,作为个程序员,就在cnblog上吧,我不是技术大牛,也不是IT狂热者,说不上是我选了它还是它选了我,结果是现在我是一名程序员,我对它很感兴趣,不为以后做业务大佬、行业顶尖,只想在自己能力范围内,把事情做到最好,在自由互联记录下自己的历程吧,工作,学习,感情,生活。 【本文由:高防cdn http://www.558idc.com/gfcdn.html 复制请保留原URL】
网友评论