如何查看六个月前的活跃ID

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

如何用一条语句将 ctc 求和到一行中,即 2023 年 1 月 1 日的 ID 在 2023 年 6 月 1 日仍然存在?所以我尝试了下面的语句但返回0!

SUM( CASE WHEN ID = LAG(ID) OVER (PARTITION BY GP ORDER BY Date- 5 MONTH) 
THEN SUM(FLOAT(value)) ELSE 0 END) AS count

我也尝试过这个:

case when date = Date- 5 MONTH then 
        coalesce(
            lag(value) over(
                partition by id, case when date = eDate- 5 MONTH then 1 else 0 end
                order by date
            ),
            0
        )
    end  AS PrevValue

dbfiddle 链接到示例数据!

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

使用相关子查询,如下所示:

WITH CUSTOMERS AS 
(
SELECT GP, ID, DATE(TO_DATE(DATE, 'MM/DD/YYYY')) AS DATE, CTC
FROM
(
VALUES
  ('AAAA', '001', '1/1/2023', 1)
, ('AAAA', '002', '1/1/2023', 1)
, ('AAAA', '003', '1/1/2023', 1)
, ('AAAA', '004', '1/1/2023', 0)
, ('AAAA', '001', '6/1/2023', 1)
, ('AAAA', '002', '6/1/2023', 1)
, ('AAAA', '005', '6/1/2023', 1)
, ('AAAA', '006', '6/1/2023', 1)
) CUSTOMERS (GP, ID, DATE, CTC)
)
SELECT 
  A.*
, A.CTC +
  COALESCE 
  (
    (
      SELECT SUM(B.CTC) 
      FROM CUSTOMERS B 
      WHERE B.ID = A.ID AND B.DATE = A.DATE - 5 MONTH
     )
   , 0
  ) AS CTC_SUM
FROM CUSTOMERS A
全科医生 身份证 日期 CTC CTC_SUM
AAAA 001 2023-01-01 1 1
AAAA 002 2023-01-01 1 1
AAAA 003 2023-01-01 1 1
AAAA 004 2023-01-01 0 0
AAAA 001 2023-06-01 1 2
AAAA 002 2023-06-01 1 2
AAAA 005 2023-06-01 1 1
AAAA 006 2023-06-01 1 1

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.