我有如下表格中的数据:
Account Id | Amount | Start_date | End_date |
---|---|---|---|
123 | 10 | 2023-11-16 17:00:00 | 2023-11-16 18:00:00 |
123 | 10 | 2023-11-16 02:00:00 | 2023-11-17 02:00:00 |
123 | 20 | 2023-11-17 17:00:00 | 2023-11-17 18:00:00 |
123 | 30 | 2023-11-18 02:00:00 | 2023-11-20 02:00:00 |
123 | 10 | 2023-11-18 17:00:00 | 2023-11-18 18:00:00 |
123 | 20 | 2023-11-19 02:00:00 | 2023-11-20 02:00:00 |
我需要计算一个Cloud ID每天的金额. 例如,对于云ID 123,在第一行中,开始日期和结束日期的间隔为1,因此日期2023-11-16将包含10.第二行,开始日期和第二天之间的差值为2,因此10的金额将在16日的日期计算为10/2(差值),即2,在17日的日期计算为10/2 = 5.
11-16 10+5 = 15
11-17 5+20 = 25
11-18 10+10= 20
11-19 10+10= 20
我需要编写一个查询来以上述方式获得结果.
到目前为止,我已经try 了以下查询,但遇到语法错误-
select start_date, end_date, account_id, amount, datediff(day, start_date, end_date) as interval into #temp
from billing where account_id = '123';
select * from #temp;
drop table if exists #result;
select account_id, start_date, end_date, interval,
CASE WHEN interval = 0 THEN amount ELSE amount/(interval + 1) END AS per_day_cost
INTO #result
UNION ALL
SELECT account_id, start_date, end_date, interval,
CASE WHEN interval = 0 THEN amount ELSE amount/(interval + 1) END AS per_day_cost
FROM (VALUES (1), (2), (3)) as v(n) CROSS JOIN
(SELECT account_id, start_date, end_date, interval, amount FROM #temp) s
where v.n <= interval
order by account_id;
select * from #result;