我的基表结构如下所示:
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/