dateにウィジェットに発生するイベントwidget_events
を記録するテーブルがあります。同じイベントが同じ日に同じウィジェットに対して複数回発生する可能性があります。このため、このような行を区別するための主キーとして列が使用されます。テーブル宣言は次のとおりです。event_what
widget_id
event_when
event_id
CREATE TABLE widget_events
(
event_id int4 UNIQUE NOT NULL,
event_when date NOT NULL,
event_what text NOT NULL,
widget_id int4 REFERENCES widgets (widget_id) NOT NULL,
PRIMARY KEY (event_id)
);
クライアント アプリケーションはイベントをバッチで処理します。各バッチは、1 つの日付の 1 つのウィジェットのすべてのイベントで構成されます。ただし、アプリケーションは、どのウィジェットと日付が に格納されているかを事前に認識していませんwidget_events
。
widget_events
考えられる解決策の 1 つは、 (SQL の を使用して)から 1 つのランダムな行を選択することから始めてから
、同じandLIMIT
を持つすべての行に対して別のクエリを実行することです。このバッチが処理された後、これらの行は から削除でき、最初のステップに戻ります。最初のステップで、返すランダムな行がなくなったと報告されると、アルゴリズムは停止します。widget_id
widget_when
widget_events
私の質問は、これを行うためのより高速でエレガントな方法があるかどうかです。SQL (特に PostgreSQL が理解する SQL) で、単一のクエリでそれぞれの個別のバッチを返すことは可能ですか?