是否有可能在PostgreSQL中实现2.0-98.0%的累积计数减少?
这意味着只能选择从2%到98%的数据范围。
答案 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%没有很好地定义这么低的行数,这可能被认为是正确的或不正确的。检查总行数并根据您的需要进行调整。例如,通过修剪最后一行。或者根本没有。