2017-04-19 10 views
0

私はSQL Serverのバックグラウンドから来ているので、PGの構文は私にとって奇妙です。正直なところ、私はTSQLでこれを行う方法もわかっていません。PGSql - 出力が値に達するとカーソルループが終了する

StartTime、EndTime、およびDurationという3つの関連する列を持つテーブルがあります。 StartTimeはアポイントメントの開始時刻、EndTimeは使用できなくなった時刻、Durationは各apptの時間を分単位で表したものです。したがって、StartTime = 0900、EndTime = 1200、Duration = 30の場合は、1200まで0900,930,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 

ご迷惑をおかけいたします。ありがとう!

答えて

0

テーブルがavailableと呼ばれ、starttimeendtimeがタイプtimestamp with time zoneまたはtimestamp without time zoneの両方がされている場合は、あなたがこのような問い合わせができます:私たちはgenerate_seriesだけであることを、あなたの全体のクエリを使用して羽目になるなかった

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; 
+0

私たちに必要なもの。ありがとう! – scarr030

関連する問題