sql - 生成可变时间步长
问题描述
你好,社区。
我正在尝试编写一个存储过程,该过程将在几分钟内用时间集群填充维度表。例如集群 = 30: 00:00-00:29、00:30-00:59、01:00-01:29 等等。
到目前为止,我想不出更好的解决方案,只能使用提供的步骤循环超过 24 小时,当时间超过 00:00 并重新开始时,存在无限循环的危险。
在寻找可能的解决方案时,我找到了一个优雅的解决方案:https ://stackoverflow.com/a/10986763/12197757 ,但没有弄清楚如何使其适应不同的时间步长。
*编辑:由于我正在处理 Azure Synapse SQL 池,因此无法使用序列生成和递归 CTE。
解决方案
你可以使用递归 cte
; with rcte as
(
select tm = cast('00:00' as time(0)) -- start time
union all
select tm = dateadd(minute, 30, tm) -- 30 mins increment
from rcte
where tm < '12:00' -- end time
)
select *
from rcte
计数表方法
declare @st time(0) = '00:00',
@en time(0) = '03:30';
with tally (n) as
(
-- 1000 rows
select row_number() over(order by (select null)) - 1
from (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n)
cross join (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
cross join (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
)
SELECT tm = dateadd(minute, n * 30, @st)
FROM tally
where n <= datediff(minute, @st, @en) / 30
推荐阅读
- c++ - 我正在使用“SparkFun Qwiic 键盘”,对于键盘库有些不明白
- c++ - 如何在 WASAPICaptureSharedEventDriven 中保存原始格式的音频文件
- core-data - 使用 SwiftUI 2.0 和 Core Data 预填充数据
- python - Flask Socketio 不更新数据
- arrays - C 字符 lin1[] = "1234"; PrintF 为整数
- kubernetes - 集群节点之间的 Kubernetes 负载均衡
- node.js - NodeJS XML 文件解析
- formula - 将公式添加到 Vba
- java - 不同Android版本上的奇怪行为约束布局动画
- c# - 如果列表是用自己的类型定义的,则不会初始化静态类