我有下表
CP ROK DOPIS_C
-----------------------
6059150790 2014 C
6059150790 2015 C
6059150790 2016 C
6059150790 2017
6059150790 2018 C
6059150790 2019
6059150790 2020 C
6059150790 2021 C
6059150790 2022 C
6059150790 2023
6059150790 2024
我需要这个输出
CP ROK DOPIS_C RN_C1
---------------------------------
6059150790 2014 C 1
6059150790 2015 C 2
6059150790 2016 C 3
6059150790 2017
6059150790 2018 C 1
6059150790 2019
6059150790 2020 C 1
6059150790 2021 C 2
6059150790 2022 C 3
6059150790 2023
6059150790 2024
在RN_C1列中,对先前记录的数量进行计数,其中DOPIS_C的值为C,如果DOPIS_C列中的先前记录中存在空值,则重置计数器
我试试这个
SELECT
CP,
ROK,
DOPIS_C,
CASE
WHEN DOPIS_C = 'C' THEN
CASE
WHEN lag(DOPIS_C) OVER (ORDER BY ROK) IS NULL THEN
ROW_NUMBER() OVER (ORDER BY ROK)
WHEN lag(DOPIS_C) OVER (ORDER BY ROK) = 'C' THEN
COUNT(CASE WHEN DOPIS_C = 'C' THEN 1 END) OVER (ORDER BY ROK)
END
ELSE 0
END AS POSILANI
FROM
table;
但结果是
6059150790 2014 C 1
6059150790 2015 C 2
6059150790 2016 C 3
6059150790 2017 0
6059150790 2018 C 5
6059150790 2019 0
6059150790 2020 C 7
6059150790 2021 C 6
6059150790 2022 C 7
6059150790 2023 0
6059150790 2024 0