の条件計算と更新:私は、以下のようにrain_tanks名付けPostgresのテーブルを持って選択し、Postgresデータベース
id hour rain demand current_volume unmet_demand
1 00:00 4.0 2.0 2 0.0
2 00:10 3.0 4.0 [null] [null]
3 00:20 1.0 6.0 [null] [null]
4 00:30 7.0 3.0 [null] [null]
私はこの計算を行うとcurrent_volumeとunmet_demand列を更新したいと思います(このコードはちょうどにあります。)私はPythonで関数またはコード行を使用せずにそれを行うしたいと思い何をすべきかを示しています。
表期待a = lag(current_volume) + rain - demand
if a < 0:
unmet_demand = current_volume
current_volume = 0
else:
unmet_demand = 0
current_volume = a
:
id hour rain demand current_volume unmet_demand
1 00:00 4.0 2.0 2 0
2 00:10 3.0 4.0 1 0
3 00:20 1.0 6.0 0 -4
4 00:30 7.0 3.0 4 0
私が必要と思うのは、最初にSELECTして列を更新することです。私は、SELECTのために次のことを試してみましたが、そのは動作していない:
import psycopg2 as p
conn = p.connect("dbname = 'test' user = 'postgres' password = 'pass' host = 'localhost'")
cur = conn.cursor()
cur.execute("""SELECT Id,rain,demand,current_volume,unmet_demand,
CASE WHEN (rain - demand + lag(current_volume) over(
order by Id)) >= 0
THEN (rain - demand + lag(current_volume) over(
order by Id)) ELSE 0 END
FROM rain_tanks ORDER BY Id""")
すべてのヘルプは本当にいただければ幸いです。
EDIT(パフォーマンスに関する質問を追加):Postgresデータベースでこれらの計算を行う理由は、Pythonでnumpy配列を使用するのと比較してスピードが向上しているかどうかを確認することでした。私は雨と需要の列のための約1000万点を持っており、ここで提供される答えは、雨と需要のnumpy配列以上の同等のpython関数よりも時間がかかります。まだクエリのパフォーマンスを改善するための領域はありますか?
*は機能しません。 –
それは私に正しい結果を与えません。 –
あなたは最初の行のこれらの値を持っています。そして他の行のためにそれを取得したいですか? –