oracle - 需要获取最新日期的数据

标签 oracle postgresql greatest-n-per-group amazon-redshift

<分区>

我有下表,

----------------------------------------
|person_id   date        pstatus    px1 |
---------------------------------------- 
  1         29|6|2016     null      089E

  1         27|6|2016     Died      null

  2         29|6|2016     null      DFWE

  2         27|6|2016     null      WEWE

  3         29|6|2016     Died      null

从上表中,我需要得到以下输出。如果“pstatus”不为空,我需要获取对应于每个 person_id 的记录,如果 pstatus 为空,则需要获取最新日期的记录。

----------------------------------------
|person_id   date        pstatus    px1 |
---------------------------------------- 

  1         27|6|2016     Died      null

  2         29|6|2016     null      DFWE

  3         29|6|2016     Died      null

最佳答案

您可以使用 row_number窗口函数枚举每个 person_id 的记录,并选择“最后”一个 - 具有非空 pstatus 或最新日期:

SELECT person_id, date, pstatus, px1
FROM   (SELECT person_id, date, pstatus, px1,
               ROW_NUMBER() OVER (PARTITION BY person_id
                                  ORDER BY CASE WHEN pstatus IS NOT NULL 
                                                THEN 0 
                                                ELSE 1 END ASC, 
                                           date DESC) AS rn
        FROM mytable) t
WHERE  rn = 1

关于oracle - 需要获取最新日期的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38179014/

相关文章:

postgresql - Heroku PSQL 将动态参数传递给 SQL 文件

MySQL 大表 JOIN 使数据库崩溃

sql - 在 SQLite 中连接三个表的最佳方式

sql - 过滤SQL查询返回的结果

oracle - Sqoop访问特定的Oracle模式

postgresql - 'CREATE TRIGGER' 在 PostgreSQL 9.4.2 中使用什么锁(如果有)

sql - 更改 PSQL 中的唯一约束

c# - 在 C# 中使用带有 LIKE 的 Oracle 绑定(bind)变量

oracle to_char 夏令时

sql - 无法在 Oracle 12c 的新安装中连接到数据库