Python 2.6 - 如何从时间戳获得点位时间

问题描述:

我正在使用包含每个timestampvalue列的记录的cx_Oracle数据库。我需要为每小时存储的记录(每天24个插槽:00-01,01-02 ... 23-00)详细说明avg,min或sum或其他聚合函数(根据配置文件)。每张表都以不同的时间戳开始,可能是十年前或昨天,所以我应该考虑从第一个时间戳的小时开始汇总记录。假设第一个时间戳是14h:43m:20s,则该记录将被存储在14-15插槽中。问题是什么是计算时间戳相应于该时间戳的下午2点的时间戳的最佳方式?然后我想用一小时的步骤继续使用timedelta + 1h算术,并做我所需要的。无论如何,我接受任何建议,如果这不是最好的方式进行。Python 2.6 - 如何从时间戳获得点位时间

+1

你不应该在SQL中而不是在Python中进行分组和聚合吗? – Arkadiy

你的问题更多的是SQL而不是python。这是我如何通过SQL获得平均值(或其他聚合)。

select avg(EXTRACT(HOUR FROM <timestamp>)) as avg_hrs, 
min(EXTRACT(HOUR FROM <timestamp>)) as min_hrs, 
sum(EXTRACT(HOUR FROM <timestamp>)) as sum_hrs 
from <table>; 

总和是没有意义的,但我让你发现它的用处。 这是计数的另一个查询。希望这可以帮助。

select EXTRACT(HOUR FROM <timestamp>) as hrs, count(*) as cnt 
from <table> 
group by EXTRACT(HOUR FROM <timestamp>) 
order by 1; 
+0

谢谢,我想通过SQL工作,但问题是该表有另一列'名称',我需要分组,然后按'时间戳'命令。我的意思是'... ORDER BY name,timestamp',并且我必须处理由'timestamp'排序的特定'name'中的所有记录,然后将它们与聚合函数进行分组。所以,我不能仅通过时间戳进行分组,因为它们可能属于不同的“名称”值。我希望我的意思很清楚。 – Caramelleamare

+0

我试着用这个'select avg(EXTRACT(HOUR FROM 1435047532))as hour',但是返回这个错误:_invalid extract field for extract source_我在哪里错了? – Caramelleamare

+1

1435047532不是时间戳,而是具有时间戳类型的数据的值。因此,如果您从中获取HOUR值,那么它就没有意义,因为它不是日期时间戳类型的数据。请给我一个你的表的样本数据与他们的列名和你想要达到的目标(像这个专栏然后平均这个列..等) – anonyXmous