About deciding previous three months.
get month and year from sy-datum or user input inside structure MONTH_YEAR. ( how?)
FORM DATE_CAL.
IF MONTH_YEAR-MONTH EQ 1 .
MONTH_YEAR-YEAR = MONTH_YEAR-YEAR - 1.
MONTH_YEAR-MONTH = 12 .
ELSE.
MONTH_YEAR-MONTH = MONTH_YEAR-MONTH - 1 .
ENDIF.
IF MONTH_YEAR-MONTH GT 9.
CONCATENATE: 'MGV' MONTH_YEAR-MONTH INTO TEMP_FS .
ELSE.
CONCATENATE: 'MGV' '0' MONTH_YEAR-MONTH INTO TEMP_FS .
ENDIF.
ENDFORM.
***********************************************************
PERFORM DATE_CAL.
MOVE TEMP_FS TO F1.
MOVE MONTH_YEAR-YEAR TO Y1.
***********************************************************
PERFORM DATE_CAL.
MOVE TEMP_FS TO F2.
MOVE MONTH_YEAR-YEAR TO Y2.
*************************************************************
PERFORM DATE_CAL.
MOVE TEMP_FS TO F3.
MOVE MONTH_YEAR-YEAR TO Y3.
About selecting months dynamically in select query.
as last 3 months are needed,
select statement should be dynamic.
but you can put only 1 (dynamic field) in select statement,
so use separate select statement for each month.
select single (month1) from mver into var1 where ...
select single (month2) from mver into var2 where ...
select single (month3) from mver into var3 where ...
consmption = var1 + var2 + var3.