首页 > 解决方案 > 如果同月数据阶段或sql的费率不同,如何解决?

问题描述

输入:

SDO Startmonth  endmonth rate
101    jan          mar    10
101    feb          mar    20
101    may          jul     30

输出:

SDO  Startmonth Endmonth rate
101    may        jul     30

我需要拒绝在同一时期具有不同费率的整个列,并且我需要获得具有唯一费率的列。

标签: sql

解决方案


假设您的“月份”列确实是日期,您可以使用not exists

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.startmonth <= t.endmonth and
                        t2.endmonth >= t.startmonth and
                        t2.rate <> t.rate
                 );

这使用了基本的重叠逻辑,即如果每个间隔在另一个结束时或之前开始,则两个间隔重叠。

和表示开始<=>=结束月份都包含在该期间中。如果不包括一个或两个结束月份,则可以调整代码。


推荐阅读