使用postgresql减少累积计数

时间:2014-03-24 17:54:26

标签: postgresql count postgresql-9.1 cumulative-sum

是否有可能在PostgreSQL中实现2.0-98.0%的累积计数减少?

这意味着只能选择从2%到98%的数据范围。

1 个答案:

答案 0 :(得分:0)

我建议在子查询中使用窗口函数ntile()

SELECT *
FROM  (
   SELECT *, ntile(50) OVER (ORDER BY ts) AS part
   FROM   tbl
   WHERE  ts >= $start
   AND    ts <  $end
   ) sub
WHERE part NOT IN (1, 50);

ts是您的date列。

ntile()为行分配整数,将它们分成指定的分区数。 Per documentation:

  

整数,范围从1到参数值,尽可能平均分割

通过使用50个分区,第一个分区尽可能地匹配前两个分区,最后一个分区与最后一个分区匹配(> 98%)。

注意,如果少于50行,则分配的数字永远不会达到50.在这种情况下,第一行将被修剪但不是最后一行。由于第一个和最后一个2%没有很好地定义这么低的行数,这可能被认为是正确的或不正确的。检查总行数并根据您的需要进行调整。例如,通过修剪最后一行。或者根本没有。