20.10.1
```
cat x.sql

drop table if exists enum_test;

create table enum_test(timestamp DateTime, host String, e Enum8('IU' = 1, 'WS' = 2))
Engine = MergeTree PARTITION BY toDate(timestamp) ORDER BY (timestamp, host);

insert into enum_test select '2020-10-09 00:00:00', 'h1', 'WS' from numbers(1000);
alter table enum_test modify column e Enum8('IU' = 1, 'WS' = 2, 'PS' = 3);
insert into enum_test select  '2020-10-09 00:00:00', 'h1', 'PS' from numbers(10);

SELECT * FROM enum_test ORDER BY timestamp DESC LIMIT 1;

Received exception from server (version 20.10.1):
Code: 49. DB::Exception: Received from localhost:9000. DB::Exception: Block structure mismatch in Pipe::unitePipes stream: different types:
timestamp DateTime UInt32(size = 0), host String String(size = 0), e Enum8('IU' = 1, 'WS' = 2, 'PS' = 3) Int8(size = 0)
timestamp DateTime UInt32(size = 0), host String String(size = 0), e Enum8('IU' = 1, 'WS' = 2) Int8(size = 0).


optimize table enum_test final;
SELECT timestamp, host FROM enum_test ORDER BY timestamp DESC LIMIT 1;
┌───────────timestamp─┬─host─┐
│ 2020-10-09 00:00:00 │ h1   │
└─────────────────────┴──────┘
```
#include <Storages/MergeTree/MergeTreeReverseSelectProcessor.h>
#include <Storages/MergeTree/MergeTreeBaseSelectProcessor.h>
#include <Storages/MergeTree/IMergeTreeReader.h>
#include <Interpreters/Context.h>
namespace DB
{
namespace ErrorCodes
{
    extern const int MEMORY_LIMIT_EXCEEDED;
}
static Block replaceTypes(Block && header, const MergeTreeData::DataPartPtr & data_part)
{
    
    
    for (const auto & name_type : data_part->getColumns())
    {
        if (header.has(name_type.name))
        {
            auto & elem = header.getByName(name_type.name);
            if (!elem.type->equals(*name_type.type))
            {
                elem.type = name_type.type;
                elem.column = elem.type->createColumn();
            }
        }
    }
    return std::move(header);
}
MergeTreeReverseSelectProcessor::MergeTreeReverseSelectProcessor(