2011-10-18 19 views
0

私は、この列を持つテーブルを持っているtimestamp(timestamp), count(integer),name(charcter varieing)更新最初の行

THERはそれに行されている名称「りんご」とdiferanteタイムスタンプを5行を言うとカウントすることができます。 私はupdatecountwhere name = 'apple'count + 1と最初のthimestamp(最小のタイムスタンプ)が必要です。 私はこれをPostgreSQLでどうやって行うことができますか?

私はこの

"UPDATE table SET count = count+1 WHERE name='apple' HAVING LEAST(timestamp)" が、その動作していないように思うだろうか?

答えて

1

この文字列で検索してください:

UPDATE table SET count = count + 1 WHERE name = 'apple' ORDER BY timestamp DESC LIMIT 1 

ORDER BYとLIMIT句は、 "最初のタイムスタンプ" "取得" するものです。

サブクエリまたはそのようなものがないことに注意してください。つまり、クエリは単純なテーブルスキャンを実行する必要があります。インデックス付きフィールドで実行する必要があります。

+0

私はこのERORのERROR取得していますおかげでNikoloff:構文エラーまたはその付近 "ORDER" LINE 3:タイムスタンプ – Gev888

+0

BY ORDER私の悪いが、PostgreSQLはUPDATE文でORDER BYを許可していません。 @ reader_1000の投稿のコードを使用したいと思います。あなたを間違って案内して申し訳ありません – Nikoloff

2

これは役に立つかもしれませんが、試していないかもしれませんし、最適化できるかもしれません。しかし、早すぎる最適化は良くないと言われています。

UPDATE MyTABLE mt SET COUNT = COUNT + 1 
WHERE mt.NAME = 'apple' and 
mt.timestamp = (SELECT MIN(t.timestamp) FROM MyTABLE t where t.NAME = 'apple') 
+0

ありがとうございます、それを行うためのより良い方法はありますか? – Gev888

関連する問題