代码之家  ›  专栏  ›  技术社区  ›  Sherms

单击库中范围为n行的每个范围的最小和最大ID

  •  0
  • Sherms  · 技术社区  · 8 年前

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

    我有一个返回uint64 id的查询。

    SELECT ids FROM <tableName> WHERE...
    

    我要执行以下操作:

    将查询结果分成n个ID的块或数组。

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

    是否可以从Clickhouse查询中进行此操作?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Sherms    8 年前

    我们最终在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
    
        2
  •  0
  •   Chris O'Connor    8 年前

    我不熟悉Clickhouse,但我可能建议使用模块化数学来分割数据。 因此,您可以选择id%n,其中n是所需的块数,并按id%n分组,选择max和min id。

    编辑:这假设您具有完全连续的int id。否则,您需要为每一行分配一个行号。