**Describe the bug**

I have a table like:

```
CREATE TABLE test (
    time DateTime64(3)
    ...
) ENGINE = MergeTree()
PARTITION BY toStartOfInterval(time, INTERVAL 1 HOUR)
...
```

But when I search in `system.parts` it does not appear to have the `min/max` columns appropriately set?

```
partition:                             2020-06-01 01:00:00
min_date:                              1970-01-01
max_date:                              1970-01-01
min_time:                              1970-01-01 00:00:00
max_time:                              1970-01-01 00:00:00
```

I assume that if these were correctly set, doing a `select toStartOfInterval(time, interval 1 day), count()` type query would be pretty instant rather than trying to scan everything? I am guessing this is due to the `DateTime64` type in use?

Clickhouse 20.11.3.3

", must be: " + toString(fields_count),
            ErrorCodes::INVALID_PARTITION_VALUE);
    const FormatSettings format_settings;
    Row partition_row(fields_count);
    if (fields_count)
    {
        ReadBufferFromMemory left_paren_buf("(", 1);
        ReadBufferFromMemory fields_buf(partition_ast.fields_str.data(), partition_ast.fields_str.size());
        ReadBufferFromMemory right_paren_buf(")", 1);
        ConcatReadBuffer buf({&left_paren_buf, &fields_buf, &right_paren_buf});
        auto input_format = FormatFactory::instance().getInput("Values", buf, metadata_snapshot->getPartitionKey().sample_block, context, context.getSettingsRef().max_block_size);
        auto input_stream = std::make_shared<InputStreamFromInputFormat>(input_format);
        auto block = input_stream->read();
        if (!block || !block.rows())
            throw Exception(
                "Could not parse partition value: `" + partition_ast.fields_str + "`",
                ErrorCodes::INVALID_PARTITION_VALUE);
        for (size_t i = 0; i < fields_count; ++i)
            block.getByPosition(i).column->get(0, partition_row[i]);
    }
    MergeTreePartition partition(std::move(partition_row));
    String partition_id = partition.getID(*this);
    {
        auto data_parts_lock = lockParts();
        DataPartPtr existing_part_in_partition = getAnyPartInPartition(partition_id, data_parts_lock);
        if (existing_part_in_partition && existing_part_in_partition->partition.value != partition.value)
        {
            WriteBufferFromOwnString buf;
            writeCString("Parsed partition value: ", buf);
            partition.serializeText(*this, buf, format_settings);