sql - 如何在 PostgreSQL 中获取每条具有特定属性集的记录之后的第一条记录?

标签 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 窗口函数的内容,它可能在这里很有用,但我不确定在这种情况下如何使用它。

最佳答案

尝试:

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

关于sql - 如何在 PostgreSQL 中获取每条具有特定属性集的记录之后的第一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854822/

相关文章:

sql - 平均股票历史表

sql - 在 SQL 中查找重复项并更新它们?

PHP 值未填充到 sql 数据库中?

postgresql - PgBouncer 和对 PostgreSQL 的授权

node.js - 安装pg Node 模块时出错

sql - 如何使用窗口函数枚举我的 Postgres 表中的分区组?

sql - 具有日期窗口保存时间的 MAX 解析函数

sql - node.js 登录无法使用 azure sql 数据库

python - 将数据存储到 SQL 不适用于我的 sql 连接器和 scrapy

postgresql - 如何将 PostgreSQL 数据库恢复到全新安装后的初始状态