PGSql - 在输出达到值时结束游标循环



我来自SQL Server背景,所以PG语法对我来说很奇怪。老实说,我也不确定我是否知道如何在 TSQL 中执行此操作......

我们有一个包含 3 个相关列的表:开始时间、结束时间和持续时间。"开始时间"表示约会可以开始发生的时间,"结束时间"表示约会不再可用的时间,"持续时间"表示每个应用程序的持续时间(以分钟为单位)。因此,如果 StartTime = 0900、EndTime = 1200 和 Duration = 30,则在 1200 之前,您的约会可用性为 0900、0930、1000,依此类推。

我们尝试将每个"约会槽"显示为单独的行。我的想法是使用类似 DATEADD(或 PG 中的时间和间隔)将持续时间添加到 StartTime,然后添加到每个输出,直到输出达到 EndTime....这可能吗?以下是获取第一个"约会时段"的示例代码

SELECT
STARTTIME + (duration * interval '1 minute')
FROM RULEdetails as rd
INNER JOIN ruledates as DT
ON DT.ruledetail_id = RD.ruledetail_id
ORDER BY RULE_DATE, STARTTIME

任何意见都非常感谢!谢谢!

如果表被调用available并且starttimeendtime都是timestamp with time zonetimestamp without time zone的类型,则可以像这样查询:

SELECT app.appstart
FROM (SELECT starttime,
endtime,
duration * INTERVAL '1 minute' AS dur
FROM available
) a
JOIN LATERAL
generate_series(a.starttime, a.endtime - a.dur, a.dur) app(appstart)
ON TRUE;

最新更新