我来自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
非常感谢任何输入!谢谢!
答案 0 :(得分:0)
如果表格被调用available
且starttime
和endtime
都属于timestamp with time zone
或timestamp 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;