我有下面的表:SQL:如何将结果限制为那些start_date最早,其中end_date为空的结果?
ref_year,ref_no,inv_id,日期,结束日期
前两列(ref_year和ref_no)结合以形成其他表主键我从现在开始将它们称为“参考”,但在本表中它们可以出现多次。第三个(inv_id)是一个外键。最后两列表示inv_id附加到引用的日期,以及适当时它停止附加到该引用的日期。
我想回到只有一行每个参考将relfect连接到该参考,其中END_DATE为空最早inv_id。这是end_date部分,导致我的问题。下面是我到目前为止有:
SELECT
t1.*
FROM
involvements t1
LEFT OUTER JOIN
involvements t2
ON
(t1.ref_year = t2.ref_year
AND
t1.ref_no = t2.ref_no
AND
t1.start_date < t2.start_date)
WHERE
t2.ref_year IS NULL
AND
t2.ref_no IS NULL
则选择具有完全的最早起始日期的inv_id,但我无法弄清楚如何解释那些情况下与最早起始日期的inv_id有END_DATE这是而不是 null,在这种情况下,我希望脚本检查该引用的下一个最老的inv_id,等等,直到它返回一个空end_date。我尝试创建一个只有null end_dates的临时表,然后内部连接到这个作为子查询,但当然不能,因为WHERE
子句出现在子查询之前。有没有一种有效的方式来获得我想要的行为?
感谢您的迅速答复。它在SQL Developer中返回一个936Error,表示在第7行缺少表达式(星号?)。我想不出为什么会这么做,有什么想法? –
@cms_mgr:为了测试它是否真的是'*',将它替换为'ref_year,ref_no,inv_id,start_date,end_date'并且看看会发生什么。 – MatBailie
对不起,我应该想到,我自己,现在完美。谢谢。 –