I've written a maintenance that deletes record history up to a specified date, and can also only remove system-generated history records i.e. where a user has not manually created or updated a record. For this particular customer, it was caused by thousands of activities being created and updated by a nightly maintenance, so by removing these it has reduced the database size by 35Gb.