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 字段。

相关推荐
weixin_4462608515 小时前
Milvus:高效能的云原生向量数据库
数据库·云原生·milvus
q***25116 小时前
Spring Boot 中使用 @Transactional 注解配置事务管理
数据库·spring boot·sql
p***434816 小时前
JavaScript数据分析实战
开发语言·javascript·ecmascript
蓝天智能16 小时前
立体字型效果的Qt QSS实现
开发语言·qt
艾莉丝努力练剑16 小时前
【C++:哈希表】从哈希冲突到负载因子:熟悉哈希表的核心机制
开发语言·c++·stl·散列表·哈希表·哈希·映射
z***33516 小时前
SQL Server 数据库管理工具的安装以及使用
数据库
虾..16 小时前
C++ 特殊类的设计
开发语言·c++
拾忆,想起17 小时前
Dubbo超时问题排查与调优指南:从根因到解决方案
服务器·开发语言·网络·微服务·架构·php·dubbo
7ioik18 小时前
什么是线程池?线程池的作用?线程池的四种创建方法?
java·开发语言·spring
寻星探路18 小时前
JavaSE重点总结后篇
java·开发语言·算法