gpt4 book ai didi

sql - 如何根据其他列的值更新列

转载 作者:行者123 更新时间:2023-12-02 02:42:28 27 4
gpt4 key购买 nike

我有如下表格

row_wid id code sub_code item_nbr orc_cnt part_cnt variance reporting_date var_start_date
1 1 ABC PQR 23AB 0 1 1 11-10-2019 NULL
2 1 ABC PQR 23AB 0 1 1 12-10-2019 NULL
3 1 ABC PQR 23AB 1 1 0 13-10-2019 NULL
4 1 ABC PQR 23AB 1 2 1 14-10-2019 NULL
5 1 ABC PQR 23AB 1 3 2 15-10-2019 NULL

我必须用 min(reporting_date) 为每个 id、code、sub_code 和 item_nbr 的组合更新 var_start_date 列,直到方差字段为零。方差 = 0 的行应具有空 var_start_date。之后的下一行应该有下一个分钟(var_start_date。)。仅供引用,方差计算为 par_cnt-orc_cnt

所以我的输出应该是这样的-

row_wid id code sub_code item_nbr orc_cnt part_cnt variance reporting_date var_start_date
1 1 ABC PQR 23AB 0 1 1 11-10-2019 11-10-2019
2 1 ABC PQR 23AB 0 1 1 12-10-2019 11-10-2019
3 1 ABC PQR 23AB 1 1 0 13-10-2019 NULL
4 1 ABC PQR 23AB 1 2 1 14-10-2019 14-10-2019
5 1 ABC PQR 23AB 1 3 2 15-10-2019 14-10-2019

我正在尝试使用以下查询编写一个函数来将数据分成几组。

SELECT DISTINCT MIN(reporting_date) 
OVER (partition by id, code,sub_code,item_nbr ORDER BY row_wid ),
RANK() OVER (partition by id, code,sub_code,item_nbr ORDER BY row_wid)
AS rnk,id, code,sub_code,item_nbr,orc_cnt,part_cnt,variance,row_wid
FROM TABLE T1

.但不知道如何包含方差字段来拆分集合。

最佳答案

我建议:

select t.*,
(case when variance <> 0
then min(reporting_date) over (partition by id, code, sub_code, item_nbr, grouping)
end) as new_reporting_date
from (select t.*,
sum(case when variance = 0 then 1 else 0 end) over (partition by id, code, sub_code, item_nbr) as grouping
from t
) t;

请注意,这不使用 JOIN。它应该比答案更有效。

关于sql - 如何根据其他列的值更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58517625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com