2

我有一个巨大的表,其中包含操作的开始时间(开始时间)+ 启动它的用户(登录名)+ 很多日期,这对于我需要的查询来说并不重要。

从那我想将时间分组为 10 分钟的时间间隔,然后计算该 10 分钟时间片的不同登录名。

到目前为止,我有这个:

SELECT
to_timestamp( extract ( 'epoch' from starttime)::int / (600) * 600 ) AS timeslice,
loginname
from request
where starttime >= '2013-06-11 00:00:00' and starttime < '2013-06-11 01:00:00'
group by timeslice, loginname
order by timeslice asc

这给了我 10 分钟的时间片,每个唯一用户一行,我如何在每个时间片中获得一行唯一用户数?

我有一些想法,但它们并不漂亮/快速……如果可能的话,我想学习做出更好/更快的查询;-)

数据库是 RHEL 5.4 上的 PostgreSQL 8.1.18

4

1 回答 1

2
select
    to_timestamp(extract('epoch' from starttime)::int / 600 * 600) AS timeslice,
    count(distinct loginname) total
from request
where starttime >= '2013-06-11 00:00:00' and starttime < '2013-06-11 01:00:00'
group by timeslice
order by timeslice asc
于 2013-06-14T12:08:03.733 回答