Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Oracle SQL:在多个列之间选择具有最新日期的单行_C#_Sql_Oracle_Stored Procedures - Fatal编程技术网

C# Oracle SQL:在多个列之间选择具有最新日期的单行

C# Oracle SQL:在多个列之间选择具有最新日期的单行,c#,sql,oracle,stored-procedures,C#,Sql,Oracle,Stored Procedures,我的基表结构如下所示: 创建表格示例\u表格 { ID号不为空, -这里的其他专栏, 创建用户VARCHAR2255字节非空, 创建\u日期默认系统日期不为空, 更新用户VARCHAR2255字节, 更新日期 } 我要做的是选择更新日期或创建日期最高的行的id。因此,类似这样的情况虽然不起作用-pID在存储过程中定义为out变量: 选择ID、MAXGREATESTCREATE\u DATE、UPDATE\u DATE作为上次修改的日期 从示例_表 将ID返回pID; 这将返回表中修改的最后一行的

我的基表结构如下所示:

创建表格示例\u表格 { ID号不为空, -这里的其他专栏, 创建用户VARCHAR2255字节非空, 创建\u日期默认系统日期不为空, 更新用户VARCHAR2255字节, 更新日期 } 我要做的是选择更新日期或创建日期最高的行的id。因此,类似这样的情况虽然不起作用-pID在存储过程中定义为out变量:

选择ID、MAXGREATESTCREATE\u DATE、UPDATE\u DATE作为上次修改的日期 从示例_表 将ID返回pID; 这将返回表中修改的最后一行的单个id。帮个小忙


另外,这是Oracle11g中的。我目前正在使用MERGE将行向上插入到表中,并使用此方法获取最后一个向上插入行的id。如果你对此有任何建设性的批评,或者有其他解决方案,我洗耳恭听。我读过很多关于为什么这是好的/坏的争论。我将在c中调用这个过程,因此任何其他提示都值得赞赏。

创建一个包含所有日期字段的所有ID的组合,然后使用rownum restriction将其最大化,以仅获取第一个ID

WITH A AS (
    SELECT ID, Max(FirstDateField) AS value
    FROM TableName
                WHERE ROWNUM=1
                GROUP BY ID
                ORDER BY Max(FirstDateField) DESC
    UNION ALL
    SELECT ID, Max(SecondDateField) AS value
    FROM TableName
                WHERE ROWNUM=1
                GROUP BY ID
                ORDER BY Max(SecondDateField) DESC
)
SELECT ID 
FROM A
WHERE ROWNUM=1
ORDER BY Value DESC

我认为你想要的结构是:

select id
from (SELECT ID
      FROM EXAMPLE_TABLE
      order by GREATEST(CREATE_DATE, UPDATE_DATE) desc
     )
where rownum = 1
但是,我认为其中一个日期可能为空。如果是:

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

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

是的,这就是我要找的。我想知道Oracle是否有比选择有序列表的第一行更快的方法。不过,这会起作用:@craignewkirk。如果性能是一个问题,请提出另一个问题。参考这篇文章,提供更多关于数据大小的信息。嗨,达伦,感谢你的回答。您知道在大型数据集上哪个更快:您的还是Gordon的?我主要使用SQL Server,但如果它确实以类似的方式响应,那么我刚才所做的修改应该会使执行速度更快,将WHERE ROWNUM=1添加到每个分组的顶级查询中。为日期字段编制索引对于创建此查询实例(无论大小)至关重要。明白了-感谢您的更新。我还没有足够的声誉去投票,但一旦我投票了,我会投票给大家,以获得反馈。