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

max_type = Field::Types::Float64;
        to_type = std::make_shared<DataTypeFloat64>();
    }
    else
        return false;
    if (descr.fill_from.getType() > max_type
        || descr.fill_to.getType() > max_type
        || descr.fill_step.getType() > max_type)
        return false;
    descr.fill_from = convertFieldToType(descr.fill_from, *to_type);
    descr.fill_to = convertFieldToType(descr.fill_to, *to_type);
    descr.fill_step = convertFieldToType(descr.fill_step, *to_type);
    if (descr.step_kind)
    {
        if (which.isDate() || which.isDate32())
        {
            Int64 avg_seconds = get<Int64>(descr.fill_step) * descr.step_kind->toAvgSeconds();
            if (avg_seconds < 86400)
                throw Exception(ErrorCodes::INVALID_WITH_FILL_EXPRESSION,
                                "Value of step is to low ({} seconds). Must be >= 1 day", avg_seconds);
        }
        if (which.isDate())
            descr.step_func = getStepFunction<UInt16>(*descr.step_kind, get<Int64>(descr.fill_step), DateLUT::instance());
        else if (which.isDate32())
            descr.step_func = getStepFunction<Int32>(*descr.step_kind, get<Int64>(descr.fill_step), DateLUT::instance());
        else if (const auto * date_time = checkAndGetDataType<DataTypeDateTime>(type.get()))
            descr.step_func = getStepFunction<UInt32>(*descr.step_kind, get<Int64>(descr.fill_step), date_time->getTimeZone());
        else if (const auto * date_time64 = checkAndGetDataType<DataTypeDateTime64>(type.get()))
        {
            const auto & step_dec = get<const DecimalField<Decimal64> &>(descr.fill_step);