In case of multiple groups, try this script:
declare @D table (ID varchar(7), ProjDate Date, ProjAmt numeric(19,5))
insert Into @D(ID, ProjDate, ProjAmt) values
('C2147', '2021-01-01', 6.60869565217391),
('C2147', '2021-01-04', 6.60869565217391),
('C2147', '2021-01-11', 6.60869565217391),
('C2147', '2021-01-18', 6.60869565217391),
('C2147', '2021-01-25', 6.60869565217391),
('C2147', '2021-02-01', 6.60869565217391),
('C2147', '2021-02-08', 6.60869565217391),
('C2147', '2021-02-15', 6.60869565217391),
('C2147', '2021-02-22', 6.60869565217391),
('C2147', '2021-03-01', 6.60869565217391),
('C2147', '2021-03-08', 6.60869565217391),
('C2147', '2021-03-15', 6.60869565217391),
('C2147', '2021-03-22', 6.60869565217391),
('C2147', '2021-03-29', 6.60869565217391),
('C2147', '2021-04-05', 6.60869565217391),
('C2147', '2021-04-12', 6.60869565217391),
('C2147', '2021-04-19', 6.60869565217391),
('C2147', '2021-04-26', 6.60869565217391),
('C2147', '2021-05-03', 6.60869565217391),
('C2147', '2021-05-10', 6.60869565217391),
('C2147', '2021-05-17', 6.60869565217391),
('C2147', '2021-05-24', 6.60869565217391),
('C2147', '2021-05-31', 6.60869565217391),
('Z0000', '2020-01-01', 9.8),
('Z0000', '2020-01-04', 9.8),
('Z0000', '2020-01-11', 9.8),
('Z0000', '2020-01-18', 9.8),
('Z0000', '2020-01-25', 9.8),
('Z0000', '2020-02-01', 9.8),
('Z0000', '2020-02-08', 9.8),
('Z0000', '2020-02-15', 9.8),
('Z0000', '2020-02-22', 9.8),
('Z0000', '2020-03-01', 9.8),
('Z0000', '2020-03-08', 9.8),
('Z0000', '2020-03-15', 9.8),
('Z0000', '2020-03-22', 9.8),
('Z0000', '2020-03-29', 9.8),
('Z0000', '2020-04-05', 9.8),
('Z0000', '2020-04-12', 9.8),
('Z0000', '2020-04-19', 9.8),
('Z0000', '2020-04-26', 9.8),
('Z0000', '2020-05-03', 9.8),
('Z0000', '2020-05-10', 9.8),
('Z0000', '2020-05-17', 9.8),
('Z0000', '2020-05-24', 9.8),
('Z0000', '2020-05-31', 9.8)
---
declare @mindate as date = (select min(ProjDate) from @d)
;
with P as
(
select ID, min(ProjDate) as mindate, sum(ProjAmt) as sumamt
from @D
group by ID
),
X as
(
select d.*, datediff(day, mindate, ProjDate) x
from @D d
inner join P on P.ID = d.ID
),
AC as
(
select ID, cast(min(x) as float) as a, cast(max(x) as float) as c
from X
group by ID
),
B as
(
select distinct ID, cast(percentile_cont( 0.75 ) within group (order by x) over (partition by ID) as float) as b
from X
),
R as
(
select X.ID, X.ProjDate, X.ProjAmt,
power(x - a, alpha - 1 ) * power(c - x, beta - 1) /
(dbo.BetaApprox(alpha, beta) * power(c - a, alpha + beta - 1)) as val
from X
inner join AC on AC.ID = X.ID
inner join B on B.ID = X.ID
cross apply (values (1 + 4 * (b - a) / (c - a), 1 + 4 * (c - b) / (c - a))) t1(alpha, beta)
),
S as
(
select ID, sum(val) as sumval
from R
group by ID
),
F as
(
select R.ID, R.ProjDate, R.ProjAmt, val * sumamt / sumval as NewProjAmt, sumamt
from R
inner join P on P.ID = R.ID
inner join S on S.ID = R.ID
)
select F.ID, F.ProjDate, F.ProjAmt as OldProjAmt, NewProjAmt, replicate( '*', NewProjAmt), sumamt as OldSum, sum(NewProjAmt) over (partition by ID) as NewSum
from F
order by ID, ProjDate
This experiment uses PERCENTILE_CONT. Maybe you can also use ‘b = a + (c - a) * 0.75’ instead.