state = 'error'
を持つすべてのレコードを取得するために、次のクエリを使用して、状態が別のものになるまでbased on this questionとします。あなたがbool_and(state='error')
条件を無視して、偽として扱われているすべての状態の下に見ることができるように文字列をブール値または整数の中のbool_andの中のPostgresで変換する
現在のクエリは、しかし、この
SELECT * from (select id, subscription_id, state, created_at,
bool_and(state='error') OVER (order by created_at, id) AS ok
FROM messages ORDER by created_at) m2
WHERE subscription_id = 1;
のように見えます。
id | subscription_id | state | created_at | ok
---------+-----------------+-------+----------------------------+----
69480 | 1 | error | 2015-06-30 15:20:03.041045 | f
69482 | 1 | error | 2015-06-30 15:20:04.582907 | f
69492 | 1 | sent | 2015-06-30 22:50:04.50478 | f
69494 | 1 | error | 2015-06-30 22:50:06.067279 | f
69502 | 1 | error | 2015-07-01 22:50:02.356113 | f
私は状態は他の何かを持っている場合、すべてのok
行がt
ときstate = 'error'
とf
を返すことを期待します。
私は、bool_and
だけがブール値と整数を取りますが、条件の結果がブール値であると想定されているかどうかはわかりません。
なぜこれが機能しないのか、どのように動作するのか、
あなたはbool_and' 'のパーティションの集約いけない - ので、あなたは一つの状態=送っがありbool_and(状態=「エラー」)が偽であることを意味します全体的に - そうですか? 'over(' –
Perfect!ありがとうございました。 – Martin
確かに、心配はありません –