我有两个表,我想获取正确的数据行,但是当我在不正确的额外行之间进行连接时正在创建。我想排除它们
表T1
Employee_ID | Work_START | 1111 | 10 11月 |
---|---|
1111 | 11月14日 |
1111 | 11月18日 |
免责声明:您应该考虑修复您的数据模型。将数据分散到两个不同的表上看起来不像是合适的设计。
对于当前的数据模型,我们可以这样处理这个问题:从第一个表中的每个开始日期开始,用子查询找到最接近的结束日期:
select t1.employee_id, t1.work_start,
(
select min(t2.work_end)
from t2
where t2.employee_id = t1.employee_id and t2.work_end > t1.work_start
) work_end
from t1
这保证了结果集中的行数与第一个表中的行数一样多(不多也不少)。如果两个表的日期没有正确地交错,您可能会看到看起来不一致的结果(使用row_number()
无法避免这种情况)。