1. 主表明细表互变
1.1 自动生成历史版本明细
2. 需求调研
3. excel
3.1. 图表易忘点
3.1.1 excel2007组合图和次坐标
3.1.2 柱状图翻转
3.1.3 累加阶梯图实现过程
3.2 公式里引用换行符号
3.3 公式可改控制excel公式和内容优先显示
3.4 打印尺寸
3.5 自检原理
3.6 快速移动变量
3.7 word转excel保留原格式
4. SQL
4.1 32位电量值只记了低16位,统计进位次数还原实际值_用窗口函数
4.2 SQL表达式隐含的类型转换
4.3 跟踪找表
4.4 主表列表规范形如带出明细
4.5 正则表达式
4.6 SQLServer复制表
4.7 写脚本往主表里新增数据,RecordID处理
4.8 查询优化
4.9 数据库同步:发布订阅
4.10 拆分字符函数split
4.11 字符串拆分字母和数字
4.12 表新增数据
4.13 存储过程定义和调用
4.14 排序
5. 备份和恢复
5.1 设计数据*.nxds备份和恢复
6. 进阶应用
6.1 对接钉钉
6.2 解析json
6.3 交叉表存数
6.4 待办-记录类场景实现过程
6.5 已发不能再发控制
6.6 通过程序集构建行函数
7 web改权限
8 无焦扫码
9 生成标签犯过的错误
10 mqtt快速登录
11 配置
12. 部署
12.1 部署习惯
12.2 开机启动
13. 应用作业
14. 小技巧
14.1 日期选择
14.2 动态公式
14.3 明细表精简
15. 坑
15.1 表标题和后台表不能重名
15.2 提右向扩展的图片明细表间公式不能√前2个清空
15.3 超过2列的同值合并

32位电量值只记了低16位,统计进位次数还原实际值_用窗口函数

2023-02-13 12:02:45
微图
1036
最后编辑:微图 于 2025-02-11 16:10:40
分享链接
摘要:窗口函数

还原效果

思路,通过统计开始到前1行 电量差 < 0 出现次数,次数*进制+电量 


select *  ,进位次数=isnull(--前所有行到上1行进位归0的次数  sum(iif(isnull(电量差, 0)<0,1,0)) over(partition by 设备名 order by ID rows between unbounded preceding and 1 preceding)   ,0)  ,累计电量=isnull(  sum(iif(isnull(电量差, 0)<0,1,0)) over(partition by 设备名 order by ID rows between unbounded preceding and 1 preceding)   ,0) * 104857.6 + 电量 --65536*1.6=104857.6,进位次数*进制
from 段采表m
易错点:用电量差做窗口条件,不含当前行(
rows between unbounded preceding and 1 preceding

)。

扩展理解4个关键参数即可:


rows between 2 preceding and current row #取当前行和前面两行
rows between unbounded preceding and current row #包括本行和之前所有的行
rows between current row and unbounded fo1lowing #包禧本行和之后所有的行
rows between 3 preceding and current row #包括本行和前面三行
rows between 3 preceding and 1 fo1lowing#从前面三行和下面一行,总共五行
#当order by后面缺少窗口从句条件,窗口规范默认是
rows between unbounded preceding and currentrow.
#当order by和窗口从句都缺失,窗口规范默认是
rows between unbounded preceding and unbounded fo1lowing

iif和over各自单独用OK,一起就报错?

改用sql创建就能一起用了


select *
	,表电量差=iif(电量差<0 , 1.6 , 电量差)
	,进位次数=isnull(--前所有行到上1行进位归0的次数
			sum(iif(isnull(电量差, 0)<0,1,0)) over(partition by 设备名 order by ID rows between unbounded preceding and 1 preceding) 
			,0)
	,表电量=isnull(
			sum(iif(isnull(电量差, 0)<0,1,0)) over(partition by 设备名 order by ID rows between unbounded preceding and 1 preceding) 
			,0) * 104857.6 + 电量		--65536*1.6=104857.6,进位次数*进制
from 段采表m

扩展:错行计数

缩小窗口范围

发表评论
评论通过审核后显示。
  • 在线客服
  • 关注微信
    • 客服帆帆
    • 客服娜娜
    • 客服美美
    • 客服龙龙
  • 扫一扫关注微信