sql - oracle请求中的Where条件

标签 sql database oracle select null

我有一个在 Oracle 数据库中可以为 null 的日期字段。

我想选择日期最长的行。 但是,如果只有一行包含 null 日期并且我使用了 max 子句,它将被忽略。

SELECT val1, val2 
from T_DER 
WHERE DATE_AP = ( SELECT MAX (DATE_AP) FROM T_DER WHERE AE= 'XXX')
AND (AE= 'XXX');

所以,在这些情况下:

  • 对于 AE = XXX => 第 1 行:DATE_AP = 01/01/2015 和第 2 行:DATE_AP = 01/02/2016
    • 返回第2行
  • 对于 AE = XXX => 第 1 行:DATE_AP = 01/01/2015 和第 2 行:DATE_AP = null
    • 返回第一行
  • 对于 AE = XXX => 第 1 行:DATE_AP = null
    • 返回第一行

最佳答案

使用解析函数:

SELECT t.*
FROM (SELECT t.*,
             ROW_NUMBER() OVER (PARTITION BY AE ORDER BY DATE_AP DESC NULLS LAST) as seqnum
      FROM T_DER t
      WHERE AE = 'XXX'
     ) t
WHERE seqnum = 1;

ROW_NUMBER() 是一个窗口/分析/排名函数,已记录 here .基本上,它为行组分配一个序列号,其中组由 partition by 子句定义,每组内的排序由 order by 定义。

关于sql - oracle请求中的Where条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911412/

相关文章:

java - 将 Types.NVARCHAR 与 oracle JDBC 驱动程序一起使用以处理西里尔字符

mysql - 将数据放入表 OneToONE 的正确方法

sql - 使用 SQL 从表中选择正确的数据

mysql - 按时间顺序对连接中的数据进行排序以获得最新条目

mysql - 这是用唯一值填充维度表的适当方法吗?

java - 分析庞大的数字数据集

oracle - 日期字符串在日期范围选择语句中不起作用

sql - 表锁会加速 Oracle 10g 企业版中的更新语句吗?

php - PHP:合并多维数组,按特定键分组

PHP : mysqli search from database