starrocks 2.5版本日期递增,实现对应序号

select DATE_FORMAT(date_add('2024-08-05',(unnest - 1)),'%Y-%m-%d') date_time,'N' enable, unnest seq

from

(select array_cum_sum(cast(split(lpad('1',(days_diff('2024-08-27','2024-08-05')*2)-1,'1;'),';') as array<int>)) as array_list

) t ,unnest(array_list)

在starrocks 2.5版本中没有像3版本那么多函数,需要实现日期生成日期和对应的序号

sql代码解说:

  1. 计算两个日期之间的天数差:`days_diff('2024-08-27', '2024-08-05')`,这里计算的是从2024年8月5日到2024年8月27日的天数差。

  2. 生成一个由1组成的字符串,长度为天数差的两倍减1:`lpad('1',(days_diff('2024-08-27','2024-08-05')*2)-1,'1')`。这个字符串将用于下一步的拆分。因为还要生成对应数的字符,所以*2

  3. 将生成的字符串按分号`;`进行拆分,形成一个整型数组:`cast(split(lpad('1',(days_diff('2024-08-27','2024-08-05')*2)-1,'1;'),';') as array<int>)`。

  4. 计算数组的累积和:`array_cum_sum(...)`。这个函数会返回一个新数组,其中每个元素是原数组对应位置之前所有元素的和。

  5. 从子查询中选取累积和数组,并通过`unnest`函数将其展开成多行,每行包含数组中的一个元素及其索引。

  6. 对于每个展开的元素,计算一个新的日期:`DATE_FORMAT(date_add('2024-08-05',(unnest - 1)),'%Y-%m-%d')`。这里是将2024年8月5日加上索引减1的天数,然后格式化为'YYYY-MM-DD'格式。

  7. 选择计算出的日期、一个固定的字符串'N'作为`enable`字段,以及展开的数组元素的索引作为`seq`字段。

这段SQL的目的是生成一个日期序列,从2024年8月5日开始,每天递增,直到2024年8月27日,并为每个日期生成一行记录,包含日期、一个标志字段`enable`(这里始终为'N')和序列号`seq`。

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智5 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
尧炎科技5 天前
防潮抗变形,就选纯品梅花全桉多层板
大数据
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G5 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
程序员大阳5 天前
副队长大数据教程(5)--集群情况下虚拟机网络配置
大数据·集群·nat·网路
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
嘉立创FPC苗工5 天前
FPC与机器人的双向赋能,解锁智能装备进化新势能
大数据·人工智能·制造·fpc·电路板
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展