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

时间:2017-04-19 14:46:05

标签: sql postgresql

我来自SQL Server背景,所以PG语法对我来说很奇怪。老实说,我不确定我是否也知道如何在TSQL中做到这一点....

我们有一个包含3个相关列的表:StartTime,EndTime和Duration。 StartTime表示约会可以开始发生的时间,EndTime表示约会不再可用,持续时间是每个appt的持续时间(以分钟为单位)。因此,如果StartTime = 0900,EndTime = 1200,持续时间= 30,您可以在0900,0930,1000等处预约,直到1200.

我们正试图展示每个预约位置'作为单独的行。我的想法是使用像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

非常感谢任何输入!谢谢!

1 个答案:

答案 0 :(得分:0)

如果表格被调用availablestarttimeendtime都属于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;