Vengo de un entorno de SQL Server, por lo que la sintaxis de PG es extraña para mí. Honestamente, tampoco estoy seguro de saber cómo hacer esto en TSQL...
Tenemos una tabla que tiene 3 columnas relevantes: StartTime, EndTime y Duration. StartTime representa el tiempo en el que las citas pueden comenzar a realizarse, EndTime es cuando ya no están disponibles y Duration es la duración de cada cita en minutos. Entonces, si StartTime = 0900, EndTime = 1200 y Duration = 30, tendría disponibilidad de citas a las 0900, 0930, 1000, y así sucesivamente hasta las 1200.
Estamos tratando de mostrar cada 'espacio para citas' como filas individuales. Mi idea sería usar algo como DATEADD (o el tiempo y los intervalos en PG) para agregar la duración a StartTime, luego a cada salida hasta que la salida alcance EndTime ... ¿es eso posible? A continuación se muestra el código de muestra para obtener el primer 'espacio para citas'
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¡Cualquier aporte es muy apreciado! ¡Gracias!
Si la tabla se llama available y la hora de starttime y la hora de endtime son del tipo timestamp with time zone o timestamp without time zone , podría consultar de esta manera:
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;