我有一個日歷表,其中標記了作業日。現在我需要一個名為“current_working_day”的運行總計,它總結了直到月底的作業日并再次重新啟動。
這是我的查詢:
select
WDAYS.Date,
WDAYS.DayName,
WDAYS.WorkingDay,
sum(WDAYS.WorkingDay) OVER(order by (Date), MONTH(Date), YEAR(Date)) as 'current_working_day',
sum(WDAYS.WorkingDay) OVER(PARTITION by YEAR(WDAYS.Date), MONTH(WDAYS.Date) ) total_working_days_per_month
from WDAYS
where YEAR(WDAYS.Date) = 2022
這是我當前的輸出
| 日期 | 日期名稱 | 作業日 | current_working_day | total_working_days_per_month |
|---|---|---|---|---|
| 2022-01-27 | 周四 | 1 | 19 | 21 |
| 2022-01-28 | 星期五 | 1 | 20 | 21 |
| 2022-01-29 | 周六 | 0 | 20 | 21 |
| 2022-01-30 | 星期日 | 0 | 20 | 21 |
| 2022-01-31 | 周一 | 1 | 21 | 21 |
| 2022-02-01 | 周二 | 1 | 22 | 20 |
| 2022-02-02 | 周三 | 1 | 23 | 20 |
| 2022-02-03 | 周四 | 1 | 24 | 20 |
但是“current_workind_day”列應該是這樣的
| 日期 | 日期名稱 | 作業日 | current_working_day | total_working_days_per_month |
|---|---|---|---|---|
| 2022-01-27 | 周四 | 1 | 19 | 21 |
| 2022-01-28 | 星期五 | 1 | 20 | 21 |
| 2022-01-29 | 周六 | 0 | 20 | 21 |
| 2022-01-30 | 星期日 | 0 | 20 | 21 |
| 2022-01-31 | 周一 | 1 | 21 | 21 |
| 2022-02-01 | 周二 | 1 | 1 | 20 |
| 2022-02-02 | 周三 | 1 | 2 | 20 |
| 2022-02-03 | 周四 | 1 | 3 | 20 |
感謝您的任何建議。
uj5u.com熱心網友回復:
您可以嘗試使用PARTITION bywithEOMONTH函式,它可能會獲得相同的結果但性能更好,那么您可能只需要 order byDate而不是使用帶有日期的函式。
select
WDAYS.Date,
WDAYS.DayName,
WDAYS.WorkingDay,
sum(WDAYS.WorkingDay) OVER(PARTITION by EOMONTH(WDAYS.Date) order by Date) as 'current_working_day',
sum(WDAYS.WorkingDay) OVER(PARTITION by EOMONTH(WDAYS.Date) ) total_working_days_per_month
from WDAYS
where YEAR(WDAYS.Date) = 2022
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452419.html
下一篇:SQL幫助,按投標拆分稅款
