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

记录一个小知识点,在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
posted @ 2022-04-15 10:31  VictorStar  阅读(626)  评论(0编辑  收藏  举报