我有一个看起来像这样的表:
行按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 ))
假设您希望第一个 CLNDR_DATE 在 EFFECTIVE_DATE之后没有.
如果你想在第一个之后没有第一个,请将子查询更改为使用min()而不是max().