**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 │
└───┘
```

interpolate();
            insertFromFillingRow(res_fill_columns, res_interpolate_columns, res_other_columns, filling_row, interpolate_block);
        }
        interpolate();
        while (filling_row.next(next_row))
        {
            insertFromFillingRow(res_fill_columns, res_interpolate_columns, res_other_columns, filling_row, interpolate_block);
            interpolate();
        }
        copyRowFromColumns(res_fill_columns, old_fill_columns, row_ind);
        copyRowFromColumns(res_interpolate_columns, old_interpolate_columns, row_ind);
        copyRowFromColumns(res_other_columns, old_other_columns, row_ind);
    }
    saveLastRow(res_fill_columns, res_interpolate_columns, res_other_columns);
    setResultColumns(chunk, res_fill_columns, res_interpolate_columns, res_other_columns);
}
void FillingTransform::setResultColumns(Chunk & chunk, MutableColumns & fill_columns, MutableColumns & interpolate_columns, MutableColumns & other_columns) const
{
    MutableColumns result_columns(fill_columns.size() + interpolate_columns.size() + other_columns.size());
    
    size_t num_rows = fill_columns[0]->size();
    for (size_t i = 0, size = fill_columns.size(); i < size; ++i)
        result_columns[fill_column_positions[i]] = std::move(fill_columns[i]);
    for (size_t i = 0, size = interpolate_columns.size(); i < size; ++i)
        result_columns[interpolate_column_positions[i]] = std::move(interpolate_columns[i]);
    for (size_t i = 0, size = other_columns.size(); i < size; ++i)
        result_columns[other_column_positions[i]] = std::move(other_columns[i]);
    chunk.setColumns(std::move(result_columns), num_rows);
}
void FillingTransform::saveLastRow(const MutableColumns & fill_columns, const MutableColumns & interpolate_columns, const MutableColumns & other_columns)