2017-08-02 4 views
1

私はdate_createdという列を持っていて、各行に現在の時刻から2日の日付マージンを持つランダムな日付を保持します。すべての行を2つの日付の間のランダムな日時で更新します。

私は以下のクエリを実行していますが、同じランダム日付のすべての行を更新します。私はすべての行をランダムで同じではないものにしたい。

update table set date_created=(select NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days') 

いずれかのアイデアがあります。

+0

... –

+0

5000未満と、それは同じままになります:

が向上し、クエリを推奨しました?。 – user1411837

答えて

2

は、クエリの代わりに式を使用します。それは一度だけ実行されますように

update my_table 
set date_created= NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days' 
2

PostgreSQLは、すべての行に使用される同じ乱数値を引き起こし、あなたのサブクエリを最適化しています。 random()が行ごとに1回実行されるようにするには、サブクエリの代わりに式を使用します。また、あなたの計算を少し簡略化することができます。あなたが持っているどのように多くのレコード

UPDATE my_table SET date_created = now() - random() * INTERVAL '2 days' 
+0

ちょっと@markusk、多分あなたの答えが彼が持っているよりも優れている理由をユーザーに伝えてください。私はこれがいつもユニークな価値を生み出すとは限りません。 now()は、基本的にはランダムです - 乱数は、以前に生成されたものを生成することがあります。 (10-2)==(11-3) –

+0

@ anthony-horne元々の質問では、すべての値が一意である必要はなく、まったく同じ値を得るわけではありません。 klinによって指摘されているように、これはサブクエリを使用して値を作成することによって発生しました。代わりに式を使用すると、新しい値が各行に使用され、klinの回答が受け入れられます。 私の答えは、現在受け入れられている回答とはちょっと違っています。 – markusk

+0

@ anthony-horne幾分精巧に作られています。 – markusk

関連する問題