所以我有一個看起來像這樣的表:
task_id | start_date |end_date
我想計算每個月的作業日數(只是從周一到周五的幾天,沒有假期)。
例如:如果一項任務從 02-01-2022 到 05-02-2022 完成,我需要結果看起來像這樣
task_id | january |february |march |april .............|december
1 21 4 0 0 .......... 0
uj5u.com熱心網友回復:
您可以嘗試使用generate_series函式在您的 start_date 和 end_date 期間生成日期,我們可以很容易地計算這些日期,然后使用條件聚合函式來進行樞軸。
extract可以通過 TIMESTAMP 型別獲取月份或作業日(從星期一到星期五),我們可以在聚合函式中使用它作為計數條件。
SELECT t1.task_id,
count(CASE WHEN extract(isodow from dt) BETWEEN 1 AND 5 AND EXTRACT(MONTH from dt) = 1 THEN 1 END) january,
count(CASE WHEN extract(isodow from dt) BETWEEN 1 AND 5 AND EXTRACT(MONTH from dt) = 2 THEN 1 END) february,
count(CASE WHEN extract(isodow from dt) BETWEEN 1 AND 5 AND EXTRACT(MONTH from dt) = 3 THEN 1 END) march
-- more months you can write
FROM T t1
CROSS JOIN generate_series(t1.start_date,t1.end_date,'1 day'::interval) dt
group by t1.task_id
sqlfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463050.html
標籤:sql PostgreSQL
