介绍关于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 | 
介绍关于MSSQL当前行中获取到上一行某列值的函数 Coalesce的更多相关文章
- Web版需求征集系统所得1,servlet中获取checkbox复选框的值
		
servlet中获取checkbox复选框的值 </tr> <tr> <td align="right">研究类型</td> < ...
 - Android中获取系统上安装的APP信息
		
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003259 Android中获取系统上安装的APP信 ...
 - 【Android】12.3 在当前Activity中获取另一个Activity的返回值
		
分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...
 - python中获取当前位置所在的行号和函数名(转)
		
http://www.vimer.cn/2010/12/%E5%9C%A8python%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E4%BD%8D%E7 ...
 - jQuery常用方法一览及JQuery选择器获取表格中按钮所在行的其他列值
		
Attribute: $(”p”).addClass(css中定义的样式类型); 给某个元素添加样式$(”img”).attr({src:”test.jpg”,alt:”test Image”}); ...
 - 微信小程序在组件中获取界面上的节点信息wx.createSelectorQuery
		
节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: const query = wx.cre ...
 - python中获取当前位置所在的行号和函数名(转)
		
http://www.vimer.cn/2010/12/%E5%9C%A8python%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E4%BD%8D%E7 ...
 - sql  循环处理表数据中当前行和上一行中某值相+/-
		
曾经,sql中循环处理当前行数据和上一行数据浪费了我不少时间,学会后才发现如此容易,其实学问就是如此,难者不会,会者不难. 以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的 ...
 - 如何在mssql中获取最新自增ID的值
		
@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy.如果在给没有 IDENTITY 列的其他表插入记录,系统 ...
 
随机推荐
- 如何使用coredump
			
一.coredump 当用户态进程出现异常后,在该进程的执行目录下生成对应的coredump文件,如果我们想将coredump生成的位置做改变,就需要如下设置. echo "/home/co ...
 - ESP8266 NodeMCU引脚说明,CH340和CP2102两款
			
开发ESP8266 NodeMCU GPIO功能时,虽然知道ESP8266 NodeMCU丝印引脚编号如下图所示(CP2102款),但是和实际对应的GPIO编号完全不一样. CP2102款 引脚说 ...
 - dp:最长非递减序列
			
#include <iostream.h> void main() { int i,j,a[14]={5,6,-6,-1,9,10,-5,-3,16,4,3,-4,-3,5}; int d ...
 - 多线程常用代码 Future    Callable    Runable
			
public class ThreadPoolTest { public static void main(String[] args) throws InterruptedException { E ...
 - maven-something
			
<!--dependencyManagement提供一种管理依赖版本好的方式--> <!-- 通常出现在项目的最顶层父POM,--> <!-- 可以让所有在子项目中引用的 ...
 - jQuery--基本过滤选择器
			
1.基本过滤选择器介绍 基本过滤器: :first 获取数组中第一个元素 :last 获取数组中最后一个 :eq(selector) 获取指定索引 :gt(index) 大于 ...
 - memcached 的内存分配器是如何工作的?为什么不适用  malloc/free!?为何要使用 slabs?
			
实际上,这是一个编译时选项.默认会使用内部的 slab 分配器.您确实确实应该 使用内建的 slab 分配器.最早的时候,memcached 只使用 malloc/free 来管理 内存.然而,这种方 ...
 - 学习Redis(三)
			
一.安装部署 1.常规安装 1.安装 # wget http://download.redis.io/releases/redis-3.0.7.tar.gz # tar xf redis-3.0.7. ...
 - 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)
			
1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...
 - 集合学习之"将集合对象List<Product>转换为Map"
			
将集合对象List<Product>转换为Map key = Product对象的sku value =Product对象 1 List<Product> products = ...