如何在PostgreSQL中设置了特定属性的每条记录之后获取第一条记录?

时间:2014-07-20 20:54:28

标签: sql postgresql window-functions

我有一个表,其中一些记录将特定属性设置为非空值。我想要获取这些记录之后的所有记录(按created_at列排序)。

以下是示例数据:

id | factor | created_at
 1 | NULL   | 2001-01-01
 2 | 1.2    | 2001-01-02
 3 | NULL   | 2001-01-03
 4 | NULL   | 2001-01-04
 5 | 0.9    | 2001-01-05
 6 | NULL   | 2001-01-06
 7 | 1.1    | 2001-01-07
 8 | NULL   | 2001-01-08
 9 | NULL   | 2001-01-09
10 | 1.1    | 2001-01-10
11 | NULL   | 2001-01-11

等等。在这种情况下,我想获取ID为3,6,8和11的记录。在PostgreSQL 9.3中它是否可行?在真正的应用ids中,不一定是顺序的 - 还有user_id列,我只获取具有相同user_id值的记录。我已经阅读了一些关于LEAD窗口函数的内容,这里可能很有用,但在这种情况下我不确定如何使用它。

1 个答案:

答案 0 :(得分:5)

尝试:

select id, factor, created_at
  from (select id,
               factor,
               created_at,
               lag(factor, 1) over(order by created_at) as prev_factor
          from tbl
         order by created_at) x
 where factor is null
   and prev_factor is not null