SQL, 有终止条件的多次累计计算

复制代码
MSSQL数据库的data表存储了多人上电梯的情况,turn表示进电梯的顺序。电梯最大承重1000公斤,每趟能上的人数有限,超重的人要等下一趟。

|---------|--------|------|
| name | weight | turn |
| Alice | 250 | 1 |
| Bob | 170 | 2 |
| Alex | 350 | 3 |
| John | 400 | 4 |
| Winston | 500 | 5 |
| Marie | 200 | 6 |

复制代码
请计算每趟电梯最后一个进入的人的名字的列表。

|---------|
| Alex |
| Winston |
| Marie |

编写SPL代码:

|---|---------------------------------------------------------|
| | A |
| 1 | =sqlServer1.query("select * from data order by turn") |
| 2 | >cum=0 |
| 3 | =A1.group@i(if( (cum+=weight)>1000, cum=weight, null)) |
| 4 | =A3.(~.m(-1).name) |

A1:用SQL取数,按turn排序。

A2:给累计变量设初值

A3:按每趟电梯分组。当累计值大于 1000 时,开始新的分组,并将累计值重置为当前乘客体重。

A4:取每组的最后一条记录的 name 字段。

相关推荐
箫笙默35 分钟前
JS基础 - 正则笔记
开发语言·javascript·笔记
TDengine (老段)42 分钟前
TDengine 时间函数 WEEK 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
xxp43211 小时前
Qt 网络编程 TCP通信
开发语言·qt
还是鼠鼠1 小时前
Redisson实现的分布式锁能解决主从一致性的问题吗?
java·数据库·redis·分布式·缓存·面试·redisson
T***u3331 小时前
PHP在电商中的会员管理
开发语言·wireshark·php·ue4·jina
张丶大帅1 小时前
JS案例合集
开发语言·javascript·笔记
DingYuan1011 小时前
MySql分类
数据库·mysql
杨云龙UP2 小时前
SQL Server 备份异地同步 + 清理脚本
运维·服务器·数据库·sql·mysql·sqlserver
O***Z6162 小时前
Redis——Windows安装
数据库·windows·redis
2301_795167202 小时前
Python 高手编程系列八:缓存
开发语言·python·缓存