チケットを受信してからの応答時間を決定するストアド プロシージャを更新しようとしています。テーブルには、チケットが受信されたときのタイムスタンプ (ref_dttm TIMESTAMP WITHOUT TIME ZONE) と、チケットが最初に応答されたときのタイムスタンプ (first_action_dttm TIMESTAMP WITHOUT TIME ZONE) があります。応答時間を計算するときは、営業時間、週末、および祝日の休業日を考慮する必要があります。
現在、この関数は間隔を計算し、休業時間を差し引くことができますが、週末と休日を除外する方法がわかりません。基本的に、平日 (09:00 ~ 18:00 まで営業) で 15 時間、週末と祝日で 24 時間を差し引く必要があります。
チケットを受け取る曜日と期間を考えると、次のようになります。
Select
extract(dow from ref_dttm) as dow,
extract(days from (ref_dttm - first_action_dttm) as days
週末が何回過ぎたかを簡単に判断する方法はありますか?
これは私がこれまでに持っているものです-1日あたり15時間を差し引いており、週末は考慮されていません:
CREATE TEMP TABLE tmp_ticket_delta ON COMMIT DROP AS
SELECT id,ticket_id,ticket_num
,(ticket_dttm - first_action_dttm) as delta
,extract(days from (ticket_dttm - first_action_dttm)) as days
,ticket_descr
FROM t_tickets
WHERE ticket_action_by > 0
SELECT id,ticket_id,ticket_num,delta,days,ticket_descr,
CASE WHEN days = 0 THEN
CASE WHEN extract(hour from delta) > 15 THEN
--less than one day but outside of business hours so subtract 15 hrs
delta - INTERVAL '15:00:00.000'
ELSE
delta
END
ELSE
CASE WHEN extract(hour from delta) > 15 THEN
--take the total number of hours - closing hours + delta - closed hours
(((days * 24) - (days * 15)) * '1 hour'::INTERVAL) + delta - INTERVAL '15:00:00.000' - (days * '1 day'::INTERVAL)
ELSE
(((days * 24) - (days * 15)) * '1 hour'::INTERVAL) + delta - (days * '1 day'::INTERVAL)
END
END AS adj_diff
FROM tmp_ticket_delta