**Describe the unexpected behaviour**

The `WITH FILL` modifier on an `ORDER BY` clause does not accept a negative
`INTERVAL` as a `STEP`, when the `ORDER BY` is applied to a `Date` column
and the order is `DESC`. This is unexpected because negative steps work
fine on numeric columns sorted in descending order.

**How to reproduce**

* Which ClickHouse server version to use

22.4.4.3

* Queries to run that lead to unexpected result

```sql
SELECT d
FROM
(
  SELECT toDate(1) AS d
)
ORDER BY d DESC WITH FILL FROM toDate(3) TO toDate(0) STEP INTERVAL -1 DAY
;
```

```
Received exception from server (version 22.4.4):
Code: 475. DB::Exception: Received from localhost:9000. DB::Exception: Value of step is to low (-86400 seconds). Must be >= 1 day. (INVALID_WITH_FILL_EXPRESSION)
```

**Expected behavior**

Like numeric columns, `Date` should also support negative steps.

```sql
SELECT n
FROM
(
    SELECT 1 AS n
)
ORDER BY n DESC WITH FILL FROM 3 TO 0 STEP -1

┌─n─┐
│ 3 │
│ 2 │
│ 1 │
└───┘
```

{
    if (on_totals)
        return;
    Columns old_fill_columns;
    Columns old_interpolate_columns;
    Columns old_other_columns;
    MutableColumns res_fill_columns;
    MutableColumns res_interpolate_columns;
    MutableColumns res_other_columns;
    std::vector<std::pair<MutableColumns *, size_t>> res_map;
    res_map.resize(input.getHeader().columns());
    auto init_columns_by_positions = [&res_map](const Columns & old_columns, Columns & new_columns,
        MutableColumns & new_mutable_columns, const Positions & positions)
    {
        for (size_t pos : positions)
        {
            auto old_column = old_columns[pos]->convertToFullColumnIfConst();
            new_columns.push_back(old_column);
            res_map[pos] = {&new_mutable_columns, new_mutable_columns.size()};
            new_mutable_columns.push_back(old_column->cloneEmpty()->assumeMutable());
        }
    };
    Block interpolate_block;
    auto interpolate = [&]()
    {
        if (interpolate_description)
        {
            interpolate_block.clear();
            if (!input_positions.empty())
            {