2017-04-04 80 views
0

我正在使用包含每個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

回答

0

你的問題更多的是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