使用单个SQL执行此操作

Ser*_*nik 1 sql oracle

我有一个看起来像这样的表:

替代文字

行按CLNDR_DATE DESC排序.

我需要找到与突出显示的行对应的CLNDR_DATE,换句话说:
找到最顶层的行WHERE EFFECTIVE_DATE是非NULL,并返回该组的最后一行的CLNR_DATE.

通常我会打开一个光标并从上到下循环,直到我在EFFECTIVE_DATE中找到NULL.然后我会知道我要查找的日期是CLNDR_DATE,在上一步获得.

但是,我想知道使用单个SQL是否可以实现相同的目标?

Jon*_*ski 7

警告:无论如何不是DBA.;)

但是,快速,未经测试的刺伤:

SELECT min(CLNDR_DATE) FROM [TABLE]
WHERE (EFFECTIVE_DATE IS NOT NULL)
  AND (CLNDR_DATE > (
    SELECT max(CLNDR_DATE) FROM [TABLE] WHERE EFFECTIVE_DATE IS NULL
  ))
Run Code Online (Sandbox Code Playgroud)

假设您希望第一个 CLNDR_DATE EFFECTIVE_DATE之后没有.

如果你想在第一个之后没有第一个,请将子查询更改为使用min()而不是max().