PostgreSQL:按分钟查询行数的运行总计
问题概述
您需要检索每分钟直到该特定时间的行总数。
计算总数的最佳方法
<code class="language-sql">SELECT DISTINCT date_trunc('minute', "when") AS minute, count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct FROM mytable ORDER BY 1;</code>
此查询使用 date_trunc()
函数仅提取“when”字段的分钟部分。作为窗口函数在此截断的分钟分量上聚合的 count()
函数提供运行总计。
最快的方法
<code class="language-sql">SELECT minute, sum(minute_ct) OVER (ORDER BY minute) AS running_ct FROM ( SELECT date_trunc('minute', "when") AS minute, count(*) AS minute_ct FROM tbl GROUP BY 1 ) sub ORDER BY 1;</code>
此查询聚合到子查询中以计算每分钟的行数。然后,它使用窗口函数执行运行总和。
处理无活动的分钟
为了确保每个分钟都被计算在内,即使那些没有活动:
<code class="language-sql">SELECT m.minute, COALESCE(sum(c.minute_ct) OVER (ORDER BY m.minute), 0) AS running_ct FROM ( SELECT generate_series(date_trunc('minute', min("when")), max("when"), interval '1 min') FROM tbl ) m(minute) LEFT JOIN ( SELECT date_trunc('minute', "when") AS minute, count(*) AS minute_ct FROM tbl GROUP BY 1 ) c USING (minute) ORDER BY 1;</code>
此查询使用 generate_series()
为范围内的每一分钟创建一个行,并使用 LEFT JOIN
来计算和汇总基表中的行。
以上是如何计算 PostgreSQL 中每分钟的运行总行数?的详细内容。更多信息请关注PHP中文网其他相关文章!