我有一个包含以下列的表格:
ref_year、ref_no、inv_id、start_date、end_date
前两列(ref_year 和 ref_no)在其他表中组合形成一个主键,从现在开始我将它们称为“引用”,但在这个表中它们可以出现多次。第三个(inv_id)是外键。最后两列表示 inv_id 附加到引用的日期,以及在适当情况下停止附加到该引用的日期。
我想为每个引用准确返回一行,这将反映附加到该引用的最早 inv_id ,其中end_date 为 null。这是导致我出现问题的 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
这完美地选择了具有最早 start_date 的 inv_id,但我不知道如何解释具有最早 start_date 的 inv_id 的 end_date不为空的情况,在这种情况下,我希望脚本检查取而代之的是该引用的下一个最旧的 inv_id,依此类推,直到它返回一个带有空 end_date 的值。我尝试创建一个只有 null end_dates 的临时表,然后将其作为子查询内部加入,但当然不能,因为该WHERE
子句位于子查询之前。有没有一种有效的方法来获得我想要的行为?