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

行按CLNDR_DATE DESC排序.
我需要找到与突出显示的行对应的CLNDR_DATE,换句话说:
找到最顶层的行WHERE EFFECTIVE_DATE是非NULL,并返回该组的最后一行的CLNR_DATE.
通常我会打开一个光标并从上到下循环,直到我在EFFECTIVE_DATE中找到NULL.然后我会知道我要查找的日期是CLNDR_DATE,在上一步获得.
但是,我想知道使用单个SQL是否可以实现相同的目标?
警告:无论如何不是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().