重复 LEAST(DENSE_RANK() OVER (PARTITION BY)) 的最大计数

问题描述 投票:0回答:1

如何重写下面的sql以重复每个组的最大计数数,如图所示作为所需结果列?

LEAST(DENSE_RANK() OVER (PARTITION BY GP, DATEDIFF  ORDER BY  YRMO ASC), 12) AS ACTIVE_MOS

GP  YRMO    DATEDIFF    ACTIVE_MOS  DESIRED RESULT
54  202012  0   1   12
54  202101  0   2   12
54  202102  0   3   12
54  202103  0   4   12
54  202104  0   5   12
54  202105  0   6   12
54  202106  0   7   12
54  202107  0   8   12
54  202108  0   9   12
54  202109  0   10  12
54  202110  0   11  12
54  202111  0   12  12
54  202112  0   12  12
54  202201  0   12  12
54  202202  0   12  12
54  202203  0   12  12
54  202204  0   12  12
54  202205  0   12  12
54  202206  0   12  12
54  202207  0   12  12
54  202208  0   12  12
54  202209  0   12  12
54  202210  0   12  12
54  202211  0   12  12
54  202310  1   1   4
54  202311  1   2   4
54  202312  1   3   4
54  202401  1   4   4

sql db2 db2-400 db2-luw
1个回答
0
投票

试试这个。

WITH T (GP, YRMO, DATEDIFF) AS
(
VALUES
  (54, 202012, 0)
, (54, 202101, 0)
, (54, 202102, 0)
, (54, 202103, 0)
, (54, 202104, 0)
, (54, 202105, 0)
, (54, 202106, 0)
, (54, 202107, 0)
, (54, 202108, 0)
, (54, 202109, 0)
, (54, 202110, 0)
, (54, 202111, 0)
, (54, 202112, 0)
, (54, 202201, 0)
, (54, 202202, 0)
, (54, 202203, 0)
, (54, 202204, 0)
, (54, 202205, 0)
, (54, 202206, 0)
, (54, 202207, 0)
, (54, 202208, 0)
, (54, 202209, 0)
, (54, 202210, 0)
, (54, 202211, 0)
, (54, 202310, 1)
, (54, 202311, 1)
, (54, 202312, 1)
, (54, 202401, 1)
)
SELECT 
  T.*
, MAX (ACTIVE_MOS) OVER (PARTITION BY GP, DATEDIFF) AS DESIRED_RESULT
FROM
(
SELECT 
  T.*
, LEAST (DENSE_RANK() OVER (PARTITION BY GP, DATEDIFF  ORDER BY  YRMO ASC), 12) AS ACTIVE_MOS 
FROM T
) T
全科医生 YRMO 日期差异 ACTIVE_MOS 期望结果
54 202012 0 1 12
54 202101 0 2 12
54 202102 0 3 12
54 202103 0 4 12
54 202104 0 5 12
54 202105 0 6 12
54 202106 0 7 12
54 202107 0 8 12
54 202108 0 9 12
54 202109 0 10 12
54 202110 0 11 12
54 202111 0 12 12
54 202112 0 12 12
54 202201 0 12 12
54 202202 0 12 12
54 202203 0 12 12
54 202204 0 12 12
54 202205 0 12 12
54 202206 0 12 12
54 202207 0 12 12
54 202208 0 12 12
54 202209 0 12 12
54 202210 0 12 12
54 202211 0 12 12
54 202310 1 1 4
54 202311 1 2 4
54 202312 1 3 4
54 202401 1 4 4

小提琴

请注意,如果您不需要具有以下表达式的结果中的

ACTIVE_MOS
列,则可以省略 DB2 for LUW 中的子选择(但不能在 DB2 for IBM i 中)。

MAX 
(
  LEAST (DENSE_RANK() OVER (PARTITION BY GP, DATEDIFF  ORDER BY  YRMO ASC), 12)
) OVER (PARTITION BY GP, DATEDIFF) AS DESIRED_RESULT
© www.soinside.com 2019 - 2024. All rights reserved.