SQL查询:将时间分组到时间片中,然后按loginname分组,然后计算每个时间片的不同loginname
我有一个巨大的表,其中包含操作的开始时间(starttime)+启动它的用户(loginname)+许多对我需要的查询不重要的日期 从这一点出发,我想将时间分组为10分钟的间隔,然后获得10分钟时间片的不同登录名的计数 到目前为止,我有: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 &
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
是语法糖,尽管有些人会说这是推荐的。