I would think creating a button and using the URL field population method would work well in this scenario.
Check out this link, it's a pretty detailed guide on how to do it.
In your scenario where you want to populate a new record with values of the previous record, we'll need to have the old records values on the master record.
We could do this two ways:
- Use a workflow rule on the child object to update custom field(s) on the master record i.e. 'Last Meter Reading Value'.
- Use a rollup summary filter to find the value of the latest child object record - I'm not sure offhand if this is possible with rollup summary fields, so that's why I've included the workflow option.
Then use the 'Last Meter Reading Value' on the master record to prepopulate the 'Old Value' field on the new child object record using the URL population method outlined above.
This is assuming you have a data model along the lines of:
Object: Master Object (Account? Contact? Meter? Other?)
Field: Last Meter Reading Value
Object: Child Object (Meter Reading)
Field: Old Value
Field: New Value
Field: Difference (Formula: New Value - Old Value)
The process would be something like:
1. Master Object record 'Meter 1' is created.
- Last Meter Reading Value = 0.
2. Meter Reading record 'Meter Reading 1' is created.
- Old Value is 0.
- New Value is 12.
3. Workflow rule fires on creation of 'Meter Reading 1'.
- Field update: Updates 'Meter 1: Last Meter Reading Value' with the value of 'Meter Reading 1: New Value' (12).
4. Meter Reading record 'Meter Reading 2' is created.
- Old Value is 12 (pre-populated from the value of 'Meter 1: Last Meter Reading Value').
- New Value is 36.
5. Workflow rule fires on creation of 'Meter Reading 2'.
- Field update: Updates 'Meter 1: Last Meter Reading Value' with the value of 'Meter Reading 2: New Value' (36).
Steps 4 & 5 are repeated for each new Meter Reading record.