SQL查询:将时间分组到时间片中,然后按loginname分组,然后计算每个时间片的不同loginname

SQL查询:将时间分组到时间片中,然后按loginname分组,然后计算每个时间片的不同loginname,sql,postgresql,Sql,Postgresql,我有一个巨大的表,其中包含操作的开始时间(starttime)+启动它的用户(loginname)+许多对我需要的查询不重要的日期 从这一点出发,我想将时间分组为10分钟的间隔,然后获得10分钟时间片的不同登录名的计数 到目前为止,我有: SELECT to_timestamp( extract ( 'epoch' from starttime)::int / (600) * 600 ) AS timeslice, loginname from request where starttime &

我有一个巨大的表,其中包含操作的开始时间(starttime)+启动它的用户(loginname)+许多对我需要的查询不重要的日期

从这一点出发,我想将时间分组为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
选择
to_时间戳(从starttime中提取('epoch'):int/(600)*600作为时间片,
登录名
根据要求
其中starttime>='2013-06-11 00:00:00'和starttime<'2013-06-11 01:00:00'
按时间片分组,登录名
按时间片asc订购
这给了我10分钟的时间片,每个唯一用户有一行,我如何得到每个时间片有唯一用户数的一行

我有一些想法,但不太快。。。如果可能的话,我想学习更好/更快的查询;-)

数据库是RHEL 5.4上的PostgreSQL 8.1.18
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
将时间戳(从starttime中提取('epoch'):int/600*600)作为时间片, 计数(不同的登录名)总计 根据要求 其中starttime>='2013-06-11 00:00:00'和starttime<'2013-06-11 01:00:00' 按时间片分组 按时间片asc订购
这很简单。。。谢谢:)(我认为与以前一样的总数不见了;-)@Patrick
as
是语法糖,尽管有些人会说这是推荐的。