Min&每个范围的最大ID,其中范围是ClickHouse中的N行

时间:2018-06-14 17:40:59

标签: sql clickhouse

在ClickHouse中可能没有办法做到这一点,但我希望有。

我有一个返回Uint64 ID的查询。

SELECT ids FROM <tableName> WHERE...

我想做以下事情:

将查询结果划分为N个ID的块或数组。

仅返回每个块的最小和最大ID。

这可以通过ClickHouse查询吗?

2 个答案:

答案 0 :(得分:1)

我们终于在ClickHouse电报频道的帮助下弄明白了这一点。放在这里以防其他人可以使用此信息:

    SELECT min(id) AS minId, max(id) AS maxId, bucket_num, FROM (
      SELECT id, toUInt32(rowNumberInAllBlocks() / :rows) AS bucket_num FROM (
        SELECT id
        FROM <tableName>
        WHERE date_time >= :minDateTime 
        AND date_time <= :maxDateTime 
        ORDER BY id ASC))
    GROUP BY bucket_num
    ORDER BY bucket_num DESC

答案 1 :(得分:0)

我不熟悉clickhouse,但我可能会建议使用模块化数学来分块数据。 所以你可以做SELECT id%n,其中n是你想要的块数,按ID%n分组,选择max和min id。

编辑:这假设你有完全顺序的int id。如果不是,您需要为每一行分配行号。