2017-04-04 9 views
0

私は、timestampvalueの各列を持つレコードでcx_Oracleデータベースを使っています。私は毎時(24スロット/日:00-01、01-02 ... 23-00)に格納されたレコードの平均、または合計、または集計関数(設定ファイルによる)を詳しく説明する必要があります。すべてのテーブルは、異なるタイムスタンプで始まります。おそらく10年前または昨日だったので、最初のタイムスタンプ時から記録を集約することを検討してください。最初のタイムスタンプを14h:43m:20sとすると、このレコードは14-15スロットに格納されます。質問はそのタイムスタンプの14:00時に対応するタイムスタンプを計算する最良の方法は何ですか?それから私はtimedelta + 1h算術を使って1時間ステップ進んで、私が必要とすることをすると思った。これが最善の方法でない場合は、とにかく私はアドバイスを受け入れます。Python 2.6 - タイムスタンプから時刻を取得する方法

+1

PythonではなくSQLでグループ化と集計を行いますか? – Arkadiy

答えて

0

あなたの質問は、PythonではなくSQLです。これは、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で作業したいと思いますが、問題はテーブルに別の列 'name'があり、それをグループ化し、' timestamp'で並べ替える必要があるということです。 '... ORDER BY name、timestamp'を意味し、' timestamp'で指定された特定の 'name 'のすべてのレコードを処理し、集約関数でそれらをグループ化する必要があります。だから、彼らは異なる 'name'値に属している可能性があるので、タイムスタンプだけでグループ化することはできません。私が言っていることがはっきりしていることを願っています。 – Caramelleamare

+0

私はこの 'select avg(EXTRACT(時間帯1435047532))時に'を試していますが、このエラーを返します:_invalid extract source for extract_どこが間違っていますか? – Caramelleamare

+1

1435047532は、タイムスタンプではなく、タイムスタンプタイプのデータの値です。したがって、HOURの値を取得した場合は、日付のタイムスタンプのデータ型ではないので意味がありません。 Plsはあなたのテーブルのカラム名と達成したいもののサンプルデータを提供します(このカラムのグループのように、このカラムを...) – anonyXmous

関連する問題