介绍关于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 |
在时间轴上留下点什么,作为个程序员,就在cnblog上吧,我不是技术大牛,也不是IT狂热者,说不上是我选了它还是它选了我,结果是现在我是一名程序员,我对它很感兴趣,不为以后做业务大佬、行业顶尖,只想在自己能力范围内,把事情做到最好,在博客园记录下自己的历程吧,工作,学习,感情,生活。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?