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

SQL筛选结果集以偶数间隔返回最大行数

  •  0
  • Gavin  · 技术社区  · 15 年前

    我目前使用SQL2008,其中有一个存储过程,从表中获取数据,然后将数据输入到客户机上的折线图中。此过程采用起始日期和过日期作为参数来过滤数据。这对于小数据集很好,但是当输入一个大的日期范围时,图形会变得有点混乱。

    谢谢

    1 回复  |  直到 15 年前
        1
  •  3
  •   Frank    15 年前

    WITH p as (
         SELECT a, b,
                row_number() OVER(ORDER BY time_column) as row_no,
                count() OVER() as total_count
           FROM myTable
          WHERE <date is in range>
         )
    SELECT a, b
      FROM p
     WHERE row_no % (total_cnt / 10) = 1
    

    底部的where条件计算行数的模数,即记录总数除以所需的最终记录数。

    WITH p as (
         SELECT a, b,
                row_number() OVER(ORDER BY time_column) as row_no,
                count() OVER() as total_count
           FROM myTable
          WHERE <date is in range>
         ),
        a as (
        SELECT a, b, row_no, total_count,
               avg(a) OVER(partition by row_no / (total_cnt / 10)) as avg_a
          FROM p
        )
    SELECT a, b, avg_a
      FROM a
     WHERE row_no % (total_cnt / 10) = 1
    

    在final WHERE子句中选择一个值的公式与 % 替换为 / 在partition by子句中。

    推荐文章