如何用一条语句将 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 链接到示例数据!
使用相关子查询,如下所示:
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 |