【问题标题】:How do I get records before found record with condition?如何在找到有条件的记录之前获取记录?
【发布时间】:2021-12-29 21:22:14
【问题描述】:

我有以下按日期排序的结构

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 

我想为每个 object_id 在 is_good 列中选择第一个“true”之前的记录 所以预期的结果

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 

【问题讨论】:

  • 对不起:我没听懂

标签: sql postgresql


【解决方案1】:

首先,您需要为每个 object_id 找到“真”值的所有最小 id。参见“with”部分。

一旦你有了它们,剩下要做的就是使用 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

dbfiddle

【讨论】:

  • 非常感谢,这正是我要找的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多