考慮下面的數據結構相匹配:選擇直到行中的Postgres
id | subscription_id | state | created_at | ok
---------+-----------------+-------+----------------------------+----
1 | 1 | error | 2015-06-30 15:20:03.041045 | f
2 | 1 | error | 2015-06-30 15:20:04.582907 | f
3 | 1 | sent | 2015-06-30 22:50:04.50478 | f
4 | 1 | error | 2015-06-30 22:50:06.067279 | f
5 | 1 | error | 2015-07-01 22:50:02.356113 | f
我想與state='error'
檢索最新消息,直到state
含有別的東西。
應該返回此:
id | subscription_id | state | created_at | ok
---------+-----------------+-------+----------------------------+----
4 | 1 | error | 2015-06-30 22:50:06.067279 | f
5 | 1 | error | 2015-07-01 22:50:02.356113 | f
繼this question和later this one,我結束了下面這個查詢:
SELECT * from (select id, subscription_id, state, created_at,
bool_and(state='error')
OVER (PARTITION BY state order by created_at, id) AS ok
FROM messages ORDER by created_at) m2
WHERE subscription_id = 1;
然而,鑑於我加PARTITION BY state
查詢被簡單地忽略所有state
其中不包含error
並顯示此代替:
id | subscription_id | state | created_at | ok
---------+-----------------+-------+----------------------------+----
1 | 1 | error | 2015-06-30 15:20:03.041045 | f
2 | 1 | error | 2015-06-30 15:20:04.582907 | f
4 | 1 | error | 2015-06-30 22:50:06.067279 | f
5 | 1 | error | 2015-07-01 22:50:02.356113 | f
在查找不同狀態並匹配上面僅示例的第4和5位頂部的示例後,如何進行查詢以「停止」?
如果你也有1行('id = 6'和'state = sent'),那麼結果是什麼?與問題相同? –
好問題。它根本不應該返回任何行。 – Martin