**Describe the unexpected behaviour**
OFFSET can work without ORDER BY , but OFFSET FETCH cannot work without ORDER BY, and throw strange syntax error: `failed at 'FETCH' Expected FETCH`.

**How to reproduce**
* Clickhouse Version: `21.10.2.15`
* `CREATE TABLE test_fetch (a INT, b INT) ENGINE=MergeTree ORDER BY b;`
* `INSERT INTO test_fetch VALUES (1, 1), (2, 1), (3, 4), (1, 4), (5, 4), (0, 6), (5, 7);`
* `OFFSET` without `ORDER BY` works: `SELECT * FROM test_fetch OFFSET 3 ROW;`
* `OFFSET FETCH` with `ORDER BY` works: `SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROWS FETCH FIRST 3 ROWS ONLY;`
* `OFFSET FETCH` without `ORDER BY`  does ***NOT*** work: `SELECT * FROM test_fetch OFFSET 3 ROWS FETCH FIRST 3 ROWS ONLY;`

**Expected behavior**
Same behavior or correct error message.

**Error message and/or stacktrace**
![OFFSET-FETCH](https://user-images.githubusercontent.com/3500109/139619530-04433404-73ed-4fc6-a76a-68cb65a5bb31.png)


void increment(ErrorCode error_code, bool remote, const std::string & message, const FramePointers & trace)
    {
        if (error_code < 0 || error_code >= end())
        {
            
            
            error_code = end() - 1;
        }
        values[error_code].increment(remote, message, trace);
    }
    void ErrorPairHolder::increment(bool remote, const std::string & message, const FramePointers & trace)
    {
        const auto now = std::chrono::system_clock::now();
        std::lock_guard lock(mutex);
        auto & error = remote ? value.remote : value.local;
        ++error.count;
        error.message = message;
        error.trace = trace;
        error.error_time_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
    }
    ErrorPair ErrorPairHolder::get()
    {
        std::lock_guard lock(mutex);
        return value;
    }
}
}