当前位置: 首页 > article >正文

SQL,根据数据的时间跨度进行不同粒度的统计

MSSQL 的某个视图会生成时间跨度不同的数据,当时间跨度小于 30 天时:

idbranchIdtotalPricecreatedAt
8512718.662022-07-03 08:49:27.727
2613832.692022-07-06 09:08:06.880
8919569.852022-07-07 04:13:09.230
8011523.622022-07-07 04:38:29.313
1512500.212022-07-11 09:01:05.183
516874.032022-07-14 23:54:05.590
4519188.032022-07-17 05:35:48.560
9814426.172022-07-21 17:35:31.617
5413862.862022-07-22 05:18:28.553
7015668.822022-07-22 06:12:33.867
6513653.672022-07-26 08:29:03.587

需要按branchId和日期分组,对 totalPrice 求和,结果应当如下:

branchIdsumTotalPricetimeFrame
12718.662022-07-03
13832.692022-07-06
111093.472022-07-07
12500.212022-07-11
16874.032022-07-14
19188.032022-07-17
14426.172022-07-21
19531.682022-07-22
13653.672022-07-26

当时间跨度大于等于 30 天且小于 365 天时:

idbranchIdtotalPricecreatedAt
5247502.972023-11-01 17:49:51.110
5647337.752023-11-06 15:38:57.567
4449385.972024-01-18 11:19:04.460

则要按branchId和月份分组,对 totalPrice 求和。注意:格式保持不变,输出的时间字段取当月的第一天。

branchIdsumTotalPricetimeFrame
414840.722023-11-01
49385.972024-01-01

当时间跨度大于等于 365 天时:

idbranchIdtotalPricecreatedAt
2225589.392020-05-23 15:22:14.703
4626103.082020-08-18 03:58:14.973
4824905.962020-10-14 23:57:48.680
8528953.032021-08-15 11:16:34.627
628132.462021-08-26 21:27:21.627
5321913.242021-09-20 17:41:13.793
423164.812022-03-18 04:24:40.840
2823506.162022-05-20 17:48:44.330
3727256.732022-07-25 20:45:16.497
1627470.382023-01-22 18:33:07.163
2725957.582023-03-22 03:04:02.687
9927722.432023-04-14 21:22:38.160
8124517.392023-04-25 11:25:17.900
7025562.042023-05-10 08:19:35.200
5529343.172023-11-17 08:56:09.870
9421056.382024-01-03 18:36:24.743
4728434.112024-03-23 09:07:31.743

要按branchId和年份分组,同样对 totalPrice 求和。注意:时间字段取当年的第一天。

branchIdsumTotalPricetimeFrame
216598.432020-01-01
218998.732021-01-01
213927.72022-01-01
240572.992023-01-01
29490.492024-01-01

编写SPL代码

 A
1=MSSQL.query("select * from tb”)
2=interval(A1.min(date(createdAt)),A1.max(date(createdAt)))
3

=A1.groups(branchId,

date(createdAt,if(A2>=356:"yyyy",A2<30: "yyyy-MM-dd";"yyyy-MM")):timeFrame;

sum(totalPrice):sumTotalPrice)

4=A3.new(#1,#3,#2)

A1:通过JDBC查询视图。

A2:计算时间跨度。

A3:分组汇总。当跨度大于365天时,时间格式掩码为yyyy,跨度小于30天时,掩码为yyyy-MM-dd,其他跨度时设置为yyyy-MM。date函数对yyyy掩码的时间字符串返回当年的第一天,对yyyy-MM掩码的时间字符串返回当月的第一天。

A4:调整字段顺序,以符合格式要求。

SPL已开源免费,欢迎下载试用


http://www.kler.cn/a/429964.html

相关文章:

  • Spring Boot中的依赖注入是如何工作
  • 常见的http状态码 + ResponseEntity
  • Apache Sedona和Spark将geojson瓦片化例子
  • WEB攻防-通用漏洞_文件上传_黑白盒审计流程
  • WEB前端-2
  • 和为0的四元组-蛮力枚举(C语言实现)
  • JavaScript 单例模式的创建与应用
  • 调度系统:DonpinScheduler 执行 Couchbase SQL 脚本的实际例子
  • 公共服务 kkFileView 4.1 文件预览 Docker 一键部署
  • 实现 DataGridView 下拉列表功能(C# WinForms)
  • 【C#】Task.Delay与Thread.Sleep
  • WPF 本地生成验证码
  • mysql 架构详解
  • 【元素操作】鼠标 -ActionChains
  • SWIRL:有望成为2025年顶级AI搜索引擎
  • 《蓝桥杯比赛规划》
  • 第七节(2)、T型加减速优化处理【51单片机-TB6600驱动器-步进电机教程】
  • NVR管理平台EasyNVR:EasyNTS上云网关无法启动且报错404如何解决?
  • 区块链钱包开发:全面功能设计方案解析
  • linux之less
  • docker-常用应用部署dockerfile模板
  • 数据库优化、sql优化
  • 奇异值分解推导——把任意n维度矢量,从vi基分量对应映射到ui基分量。所以分解后,V转置是提取矢量中属于V的列的分量。
  • 磁盘阵列服务器和普通服务器的区别
  • 在微信小程序中引入字体样式
  • 杂谈随笔-关于unity开发游戏