Hi SriKotte-6865,
The following code can achieve part of your needs:
create table meter
(prop_id int,
min_calc_date datetime,
max_calc_date datetime,
fuel_rate int
)
INSERT INTO meter
VALUES
(123,'01-01-2020','08-19-2020', 50) ,
(123,'01-01-2020','08-19-2020', 60) ,
(123,'01-01-2020','08-19-2020', 10) ,
(123,'01-30-2020','08-19-2020', 20),
(456,'01-01-2020','08-18-2020', 30),
(456,'01-01-2020','08-18-2020', 40),
(678,'01-01-2020','08-19-2020', 10),
(678,'01-01-2020','08-19-2020', 20),
(678,'01-01-2020','08-10-2020', 60)
with cte1
as(select *,max(min_calc_date) over(partition by prop_id) maxdate from meter)
,cte2 as
(select prop_id,min_calc_date,
case when min_calc_date<>maxdate then dateadd(dd,-1,maxdate) else max_calc_date end max_calc_date,fuel_rate
from cte1)
,cte3 as
(select prop_id,min_calc_date,max_calc_date,sum(fuel_rate ) fuel_rate from cte2
group by prop_id,min_calc_date,max_calc_date)
select * from cte3
drop table meter
Min_calc_date with different prop_id should have the same rules,otherwise it is difficult to implement.So if your inserted data is slightly modified,change(678,'01-01-2020','08-19-2020', 10) ,(678,'01-01-2020','08-19-2020', 20), to (678,'08-10-2020','08-19-2020', 10),(678,'08-10-2020','08-19-2020', 20),then you can have the output you expect:
create table meter
(prop_id int,
min_calc_date datetime,
max_calc_date datetime,
fuel_rate int
)
INSERT INTO meter
VALUES
(123,'01-01-2020','08-19-2020', 50) ,
(123,'01-01-2020','08-19-2020', 60) ,
(123,'01-01-2020','08-19-2020', 10) ,
(123,'01-30-2020','08-19-2020', 20),
(456,'01-01-2020','08-18-2020', 30),
(456,'01-01-2020','08-18-2020', 40),
(678,'08-10-2020','08-19-2020', 10),
(678,'08-10-2020','08-19-2020', 20),
(678,'01-01-2020','08-10-2020', 60)
with cte1
as(select *,max(min_calc_date) over(partition by prop_id) maxdate from meter)
,cte2 as
(select prop_id,min_calc_date,
case when min_calc_date<>maxdate then dateadd(dd,-1,maxdate) else max_calc_date end max_calc_date ,fuel_rate
from cte1)
,cte3 as
(select prop_id,min_calc_date,max_calc_date,sum(fuel_rate ) fuel_rate from cte2
group by prop_id,min_calc_date,max_calc_date)
select * from cte3
drop table meter
Best Regards
Echo