2016-10-04 8 views
0

私は時間の単純な減算を行う必要がありますが、1つのスクリプトに2つのクエリを実装するのに役立つ必要があります。抽出文を数学演算に組み込む方法は?

DBに内部的な制約があるため、postgresqlのいずれのメソッドを使用してもtimestamp列を変換することができません。代わりに、「抽出」を使って時、分、秒を取り出し、それらを1つの列に再結合しました。

私の質問は、抽出文とその直下の2番目のセルから時間を差し引いた数学関数の文をどのように組み合わせて、時間を差し引くと「min」か「sec」のどちらかを加えます分または秒、これが可能でない場合、心配はありません。 。例:

table A 
    time   new_time(logic) 
0 4:50:55  time(1) - time(0) = 1sec 
1 $:50:56  time(2) - time(1) 

エキス声明:

select (extract(hour from timestamp) || ':' || extract(minute from timestamp) || ':' || extract(second from timestamp)) as my_time 
from tableA 

数学の文:

update page 
set time= timestamp 
from (
    select tableA.timestamp - lead(tableA.timestamp) over (order by time) 
    from tableA 
    ) 
where tableA.id = tableB.id 

は、事前にありがとうございます。

+1

あなたは?:時間にタイムスタンプをキャストすることができ、 '()::今time'あなたのラインが機能 –

+0

を選択するが、私は時間に全体の日付/タイムスタンプ列をキャストしようとすると、それは動作しません。 – RustyShackleford

+0

日付/タイムスタンプの列_とはどういう意味ですか? –

答えて

1
update page 
set time = timestamp 
from (
    select id, 
     lead(timestamp::time) - timestamp::time over (order by timestamp::time) 
    from tableA 
) tableA 
where tableA.id = page.id 
+0

何らかの理由でタイムスタンプを時間にキャストすることができません。私は上記に投稿したエラー。 SQLエラー[500310] [0A000]:[Amazon](500310)無効な操作:指定されたタイプまたは機能(INFOメッセージごとに1つ)は、Redshiftテーブルではサポートされていません。 タイムスタンプを保持する列が「タイムゾーンなしのタイムスタンプ」としてリストされているため、キャストや変換ができないと思われますか? おかげ – RustyShackleford

+0

を支援するために、私はこの行を使用して、テーブルの詳細を見つけました: 選択*このコードは問題を解決するのに役立つかもしれないがテーブル名=「にtableA」 – RustyShackleford

+0

が、それは_why_を説明し、および/またはそれを_how_しないpg_table_defから質問に答えます。この追加の文脈を提供することは、長期的な教育的価値を大幅に改善するだろう。どのような制限や仮定が適用されるかなど、あなたの答えを解説してください。 –

関連する問題