clickhouse中范围为n行的每个范围的最小和最大ID

olhwl3o2  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(529)

在clickhouse可能没有办法做到这一点,但我希望有。
我有一个返回uint64 id的查询。

SELECT ids FROM <tableName> WHERE...

我想做以下工作:
将查询结果划分为n个id的块或数组。
仅返回每个块的最小和最大ID。
这可以通过clickhouse查询实现吗?

cx6n0qe3

cx6n0qe31#

我们终于在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
v64noz0r

v64noz0r2#

我不熟悉clickhouse,但我可能建议使用模块化数学来分割数据。因此,您可以选择id%n,其中n是所需的块数,并按id%n分组,选择max和min id。
编辑:这假设您有完全连续的int id。否则,您需要为每一行指定一个行号。

相关问题