ClickHouse не работает DISTINCT ON
Имеется таблица my_table следующего вида:
| Column1 | Column2 | Column3 | Column4 |
|---|---|---|---|
| a | b | c | d |
| m | x | c | d |
| m | x | y | z |
Необходимо получить все строки с уникальными значениями из Column2, т.е. должно получиться нечто подобное:
| Column1 | Column2 | Column3 | Column4 |
|---|---|---|---|
| a | b | c | d |
| m | x | c | d |
Пытаюсь сделать с помощью DISTINCT, однако, на запрос:
SELECT DISTINCT ON (Column2) *
FROM my_db.my_table
получаю ошибку:
SQL Error [62]: ClickHouse exception, code: 62, host: localhost, port: 8123; Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 54 ('.') (line 2, col 18): .my_table. Expected one of: UNION, LIMIT, WHERE, WINDOW, end of query, HAVING, GROUP BY, INTO OUTFILE, OFFSET, PREWHERE, Comma, ORDER BY, SETTINGS, FROM, FORMAT, WITH, token (version 21.7.3.14 (official build))
В качестве примера использовал https://clickhouse.com/docs/ru/sql-reference/statements/select/distinct/
Подскажите, что я делаю неправильно? А то информация об ошибке не сильно помогла.
Ответы (1 шт):
Автор решения: vladimir
→ Ссылка
DISTINCT ON добавлена, начиная с версии v21.8.
Поэтому либо
- обновите ClickHouse
- сэмулируйте этот запрос:
SELECT
any(Column1),
Column2,
any(Column3),
any(Column4)
FROM
(
/* emulate the test dataset */
SELECT
data.1 AS Column1,
data.2 AS Column2,
data.3 AS Column3,
data.4 AS Column4
FROM
(
SELECT arrayJoin([('a', 'b', 'c', 'd'), ('m', 'x', 'c', 'd'), ('m', 'x', 'y', 'z')]) AS data
)
)
GROUP BY Column2
/*
┌─any(Column1)─┬─Column2─┬─any(Column3)─┬─any(Column4)─┐
│ a │ b │ c │ d │
│ m │ x │ c │ d │
└──────────────┴─────────┴──────────────┴──────────────┘
*/