clickhouse - Clickhouse - 如何按日期在数组中聚合超出此日期的数据?
问题描述
我需要汇总当前行中高于特定值的所有数据,在我的情况下是日期。
我有以下数据:
date | values
2010-01-01 | value1
2010-01-02 | value2
2010-01-03 | value3
具体来说,类似于以下输出:
date | sums
2010-01-01 | [value1, value2, value3]
2010-01-02 | [value2, value3]
2010-01-03 | [value3]
有可能吗?
解决方案
试试这些查询:
具有相同日期的行重复的常见情况:
SELECT result.1 date, result.2 values
FROM (
SELECT
groupArray((date, values)) data,
arrayMap(
(x, index) -> (x.1, arrayFlatten(arrayMap(y -> y.2, arraySlice(data, index)))),
data,
arrayEnumerate(data)) result_as_array,
arrayJoin(result_as_array) result
FROM (
SELECT date, groupArray(value) values
FROM (
SELECT data.1 date, data.2 value
FROM (
/* emulate the original data */
SELECT arrayJoin(
[('2010-01-02', 'value2-1'),
('2010-01-03', 'value3-2'),
('2010-01-01', 'value1-1'),
('2010-01-02', 'value2-2'),
('2010-01-03', 'value3-1')]) data))
GROUP BY date
ORDER BY date))
/* result
┌─date───────┬─values───────────────────────────────────────────────────┐
│ 2010-01-01 │ ['value1-1','value2-1','value2-2','value3-2','value3-1'] │
│ 2010-01-02 │ ['value2-1','value2-2','value3-2','value3-1'] │
│ 2010-01-03 │ ['value3-2','value3-1'] │
└────────────┴──────────────────────────────────────────────────────────┘
*/
同一日期不重复时的具体情况:
SELECT result.1 date, result.2 values
FROM (
SELECT
groupArray((date, value)) data,
arrayMap(
(x, index) -> (x.1, arrayMap(y -> y.2, arraySlice(data, index))),
data,
arrayEnumerate(data)) result_as_array,
arrayJoin(result_as_array) result
FROM (
SELECT data.1 date, data.2 value
FROM (
/* emulate the original data */
SELECT arrayJoin(
[('2010-01-02', 'value2'),
('2010-01-01', 'value1'),
('2010-01-03', 'value3')]) data)
ORDER BY date)
)
/* result
┌─date───────┬─values───────────────────────┐
│ 2010-01-01 │ ['value1','value2','value3'] │
│ 2010-01-02 │ ['value2','value3'] │
│ 2010-01-03 │ ['value3'] │
└────────────┴──────────────────────────────┘
*/
推荐阅读
- bash - 调用函数时 Bash 脚本挂起
- puppeteer - 如何停止木偶录音机录音
- python - 从同一列表中右侧的每个元素中减去列表的每个元素
- java - 如何解决此扫描仪问题?我希望这四个动作起作用,但是每当我输入并单击输入时,它都不起作用
- arangodb - 从 ArangoDB 中获取文本搜索相关性分数?
- verilog - 是否可以通过组合块的短脉冲触发顺序始终块
- azure - 添加入站nat规则时,我可以在azure powershell中设置目标VM吗?
- hyperledger-fabric - Hyperledger Fabric Go SDK:如何解析块
- vba - EXCEL VBA中CURL的令牌认证
- ffmpeg - FFMpeg - 如何在帧的区域上应用场景选择过滤器