簡體   English   中英

在當前行滿足條件時為所有后續行設置值

[英]Set values to all subsequent rows when a condition is met at current row

以下是基本員工表。 emp_id、manager_hierarchy、month_end_date 的組合對於表來說是唯一的。

CREATE TABLE employee_table_base
(
     emp_id        INTEGER NOT NULL,
     manager_hierarchy   INTEGER NOT NULL,
     month_end_date          TIMESTAMP NOT NULL,
     assisted_flag VARCHAR(1) NOT NULL
);

INSERT INTO employee_table_base(emp_id, manager_hierarchy, month_end_date, assisted_flag)
VALUES
(12345, 1, '2021-10-31', 'N' ),
(12345, 2, '2021-10-31', 'N' ),
(12345, 3, '2021-10-31', 'N' ),
(12345, 1, '2021-11-30', 'Y' ),
(12345, 2, '2021-11-30', 'Y' ),
(12345, 3, '2021-11-30', 'Y' ),
(12345, 1, '2021-12-31', 'Y' ),
(12345, 2, '2021-12-31', 'Y' ),
(12345, 3, '2021-12-31', 'Y' ),
(12345, 1, '2022-01-31', 'Y' ),
(12345, 2, '2022-01-31', 'Y' ),
(12345, 3, '2022-01-31', 'Y' ),
(12345, 1, '2022-02-02', 'Y' ),
(12345, 2, '2022-02-02', 'Y' ),
(12345, 1, '2022-03-31', 'Y' ),
(12345, 2, '2022-03-31', 'Y' ),
(12345, 1, '2022-04-30', 'Y' ),
(12345, 2, '2022-04-30', 'Y' ),
(12345, 1, '2022-05-31', 'Y' ),
(12345, 2, '2022-05-31', 'Y' ),
(12345, 3, '2022-05-31', 'Y' ),
(12345, 1, '2022-06-30', 'N' ),
(12345, 2, '2022-06-30', 'N' ),
(12345, 1, '2022-07-31', 'Y' ),
(12345, 2, '2022-07-31', 'Y' );
emp_id manager_hierarchy 月末日期 輔助標志
12345 1 2021-10-31 00:00:00 ñ
12345 2 2021-10-31 00:00:00 ñ
12345 3 2021-10-31 00:00:00 ñ
12345 1 2021-11-30 00:00:00
12345 2 2021-11-30 00:00:00
12345 3 2021-11-30 00:00:00
12345 1 2021-12-31 00:00:00
12345 2 2021-12-31 00:00:00
12345 3 2021-12-31 00:00:00
12345 1 2022-01-31 00:00:00
12345 2 2022-01-31 00:00:00
12345 3 2022-01-31 00:00:00
12345 1 2022-02-02 00:00:00
12345 2 2022-02-02 00:00:00
12345 1 2022-03-31 00:00:00
12345 2 2022-03-31 00:00:00
12345 1 2022-04-30 00:00:00
12345 2 2022-04-30 00:00:00
12345 1 2022-05-31 00:00:00
12345 2 2022-05-31 00:00:00
12345 3 2022-05-31 00:00:00
12345 1 2022-06-30 00:00:00 ñ
12345 2 2022-06-30 00:00:00 ñ
12345 1 2022-07-31 00:00:00
12345 2 2022-07-31 00:00:00

所需的 output:

drop table if exists employee_table_ouput;
CREATE temp TABLE employee_table_ouput
(
     emp_id        INTEGER NOT NULL,
     manager_hierarchy   INTEGER NOT NULL,
     month_end_date          TIMESTAMP NOT NULL,
     assisted_flag VARCHAR(1) NOT NULL,
     assisted_baseline INTEGER NOT NULL
);


INSERT INTO employee_table_ouput(emp_id, manager_hierarchy, month_end_date, assisted_flag, assisted_baseline)
VALUES
(12345, 1, '2021-10-31', 'N', 0 ),
(12345, 2, '2021-10-31', 'N', 0 ),
(12345, 3, '2021-10-31', 'N', 0 ),
(12345, 1, '2021-11-30', 'Y', 0 ),
(12345, 2, '2021-11-30', 'Y', 0 ),
(12345, 3, '2021-11-30', 'Y', 0 ),
(12345, 1, '2021-12-31', 'Y', 1 ),
(12345, 2, '2021-12-31', 'Y', 1 ),
(12345, 3, '2021-12-31', 'Y', 1 ),
(12345, 1, '2022-01-31', 'Y', 1 ),
(12345, 2, '2022-01-31', 'Y', 1 ),
(12345, 3, '2022-01-31', 'Y', 1 ),
(12345, 1, '2022-02-02', 'Y', 1 ),
(12345, 2, '2022-02-02', 'Y', 1 ),
(12345, 1, '2022-03-31', 'Y', 1 ),
(12345, 2, '2022-03-31', 'Y', 1 ),
(12345, 1, '2022-04-30', 'Y', 1 ),
(12345, 2, '2022-04-30', 'Y', 1 ),
(12345, 1, '2022-05-31', 'Y', 1 ),
(12345, 2, '2022-05-31', 'Y', 1 ),
(12345, 3, '2022-05-31', 'Y', 1 ),
(12345, 1, '2022-06-30', 'N', 0 ),
(12345, 2, '2022-06-30', 'N', 0 ),
(12345, 1, '2022-07-31', 'Y', 1 ),
(12345, 2, '2022-07-31', 'Y', 1 );

emp_id manager_hierarchy 月末日期 輔助標志 輔助基線
12345 1 2021-10-31 00:00:00 ñ 0
12345 2 2021-10-31 00:00:00 ñ 0
12345 3 2021-10-31 00:00:00 ñ 0
12345 1 2021-11-30 00:00:00 0
12345 2 2021-11-30 00:00:00 0
12345 3 2021-11-30 00:00:00 0
12345 1 2021-12-31 00:00:00 1
12345 2 2021-12-31 00:00:00 1
12345 3 2021-12-31 00:00:00 1
12345 1 2022-01-31 00:00:00 1
12345 2 2022-01-31 00:00:00 1
12345 3 2022-01-31 00:00:00 1
12345 1 2022-02-02 00:00:00 1
12345 2 2022-02-02 00:00:00 1
12345 1 2022-03-31 00:00:00 1
12345 2 2022-03-31 00:00:00 1
12345 1 2022-04-30 00:00:00 1
12345 2 2022-04-30 00:00:00 1
12345 1 2022-05-31 00:00:00 1
12345 2 2022-05-31 00:00:00 1
12345 3 2022-05-31 00:00:00 1
12345 1 2022-06-30 00:00:00 ñ 0
12345 2 2022-06-30 00:00:00 ñ 0
12345 1 2022-07-31 00:00:00 1
12345 2 2022-07-31 00:00:00 1

基線值總是在上一年的最后一天計算

case when month_end_date = date_trunc('year', current_date) - interval '1 day') and assisted_flag = 'Y' then 1 else 0 end as assisted_baseline

是否可以在 assisted_flag = 'Y' 時將當前年份的所有行設置為 1,並在 assisted_flag = 'N' 時設置為 0。 尋找可以在沒有自連接的情況下完成的解決方案。

將您的案例表達式修改如下:

select emp_id, manager_hierarchy, month_end_date, assisted_flag,
case 
  when (
         month_end_date = date_trunc('year', current_date) - interval '1 day'
         or
         date_trunc('year', current_date) = date_trunc('year', month_end_date)
        ) 
       and assisted_flag = 'Y' 
  then 1 else 0 
end as assisted_baseline
from employee_table_base

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM