我有以下按日期排序的結構
id, object_id, is_good, created_at
1, 1, false, 2012-09-01
2, 1, false, 2012-09-02
3, 1, true, 2012-09-03
4, 1, false, 2012-09-04
5, 1, true, 2012-09-05
6, 2, true, 2012-09-06
7, 2, true, 2012-09-07
8, 2, false, 2012-09-08
我想在 is_good 列中的第一個 'true' 之前為每個 object_id 選擇記錄 所以預期的結果
id, object_id, is_good, created_at
1, 1, false, 2012-09-01
2, 1, false, 2012-09-02
3, 1, true, 2012-09-03
6, 2, true, 2012-09-06
uj5u.com熱心網友回復:
首先,您需要為每個 object_id 找到“真”值的所有最小 ID。參見“與”部分。
一旦你有了它們,剩下要做的就是使用 object_id 將你的 test_table 與該結果連接起來,并添加一個條件以獲取所有 id 小于或等于你在“with”部分找到的行
with min_ids as (
select min(id) min_id, object_id
from test_table
where is_good = 'true'
group by object_id)
select *
from test_table tt
join min_ids mi
on mi.object_id = tt.object_id
where tt.id <= mi.min_id
資料庫小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397702.html
標籤:sql PostgreSQL的
下一篇:根據用戶ID獲取平均數
