c# - 甲骨文 SQL : Selecting a single row with the latest date between multiple columns

标签 c# sql oracle stored-procedures

我的基表结构如下所示:

CREATE TABLE EXAMPLE_TABLE
{
ID NUMBER NOT NULL,
-- Other columns here,
CREATE_USER VARCHAR2(255 BYTE) NOT NULL,
CREATE_DATE DATE DEFAULT SYSDATE NOT NULL,
UPDATE_USER VARCHAR2(255 BYTE),
UPDATE_DATE DATE
}

我想要做的是选择具有最高 update_date 或 create_date 的行的 ID。所以像这样(虽然这不起作用 - pID 被定义为存储过程中的输出变量):

SELECT ID, MAX(GREATEST(CREATE_DATE, UPDATE_DATE) as LAST_MODIFIED
FROM EXAMPLE_TABLE
RETURNING ID INTO pID;

这将返回表中修改的最后一行的单个 ID。帮助不大?

附言这是在 Oracle11g 中。我目前正在使用 MERGE 将行更新插入表中,并使用此方法获取最后更新插入的行的 ID。如果您对此有任何建设性的批评(可能有替代解决方案),我会洗耳恭听。我已经阅读了很多关于为什么这是好/坏的双向争论。我将在 C# 中调用此过程,因此如有任何其他提示,我们将不胜感激。

最佳答案

我认为你想要的结构是这样的:

select id
from (SELECT ID
      FROM EXAMPLE_TABLE
      order by GREATEST(CREATE_DATE, UPDATE_DATE) desc
     )
where rownum = 1

但是,我认为其中一个日期可能为 NULL。如果是这样:

select id
from (SELECT ID
      FROM EXAMPLE_TABLE
      order by coalesce(GREATEST(CREATE_DATE, UPDATE_DATE), CREATE_DATE) desc
     )
where rownum = 1

这些查询按每行中两个值中较大的值排序,然后选择最大值。

关于c# - 甲骨文 SQL : Selecting a single row with the latest date between multiple columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16951312/

相关文章:

c# - mysql中的存储过程

c# - 如何在不将其序列化为 JSON 的情况下在 .net Core MVC Controller 中返回 HttpResponseMessage?

sql - 更改 Oracle 11gR2 的 WM_CONCAT 函数的分隔符

c# - 检查 'null'

sql - 加入连接条件?

sql - 将 Sql Server 2014 数据库连接到 Azure VM

mysql - 查询返回每行的最大数字

sql - 根据列值对行进行排名/计数

java - 使用 JDBC 从 PL/SQL 存储函数获取表返回值

c# - View 模型构造函数中的异常处理(重定向)