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

如何在PostgreSQL中设置了特定属性的每条记录之后获取第一条记录?,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我有一个表,其中一些记录的特定属性设置为非空值。我想获取紧跟在这些记录之后的所有记录(按created\u在列排序时) 以下是示例数据: 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

我有一个表,其中一些记录的特定属性设置为非空值。我想获取紧跟在这些记录之后的所有记录(按
created\u在
列排序时)

以下是示例数据:

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中是否可能?在真正的应用程序中,
id
不一定是连续的-还有
user\u id
列,我只获取具有相同
user\u id
值的记录。我已经读了一些关于
LEAD
窗口函数的文章,这些函数在这里可能很有用,但我不确定在这种情况下如何使用它。

试试:

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
尝试:


在您的示例中,“nil”是指null还是有一个实际值存储为“nil”?很抱歉,太多Ruby:)它是null。啊,gotchya。我认为lag函数应该做到这一点(见我下面的答案)在你的例子中,“nil”是指null还是有一个实际值存储为“nil”?很抱歉,太多了Ruby:)它是null。啊,gotchya。我认为滞后函数应该起作用(见下面我的答案)