Как удалить первое вхождение элемента в массиве в clickhouse? - PullRequest
0 голосов
/ 24 октября 2019

Я хочу получить что-то вроде этого

Ввод:

[2,1,4,1,1,3]

Ввод:

[2,4,1,1,3] 

1 Ответ

0 голосов
/ 24 октября 2019

Попробуйте этот запрос:

SELECT
    data.1 AS value,
    data.2 AS array,
    arrayFilter((x, groupPosition) -> groupPosition != 1 OR x != value, array, arrayEnumerateUniq(array)) AS result
FROM
(
    /* test data, where the first item is value to apply the filter, the second one is array */
    SELECT arrayJoin([
      (1, [2, 1, 4, 1, 1, 3]), /* exclude the first occurrence of 1 */
      (2, [2, 1, 4, 1, 1, 3]), /* exclude the first occurrence of 2 */
      (3, [2, 1, 4, 1, 1, 3]), /* .. */
      (4, [2, 1, 4, 1, 1, 3]),
      (5, [2, 1, 4, 1, 1, 3]),
      (1, []),
      (1, [1]),      
      (1, [1, 1, 1])
      ]) AS data
)

/* Result:
┌─value─┬─array─────────┬─result────────┐
│     1 │ [2,1,4,1,1,3] │ [2,4,1,1,3]   │
│     2 │ [2,1,4,1,1,3] │ [1,4,1,1,3]   │
│     3 │ [2,1,4,1,1,3] │ [2,1,4,1,1]   │
│     4 │ [2,1,4,1,1,3] │ [2,1,1,1,3]   │
│     5 │ [2,1,4,1,1,3] │ [2,1,4,1,1,3] │
│     1 │ []            │ []            │
│     1 │ [1]           │ []            │
│     1 │ [1,1,1]       │ [1,1]         │
└───────┴───────────────┴───────────────┘
*/
...