sql - 如果同月数据阶段或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
我需要拒绝在同一时期具有不同费率的整个列,并且我需要获得具有唯一费率的列。
解决方案
假设您的“月份”列确实是日期,您可以使用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
);
这使用了基本的重叠逻辑,即如果每个间隔在另一个结束时或之前开始,则两个间隔重叠。
和表示开始<=
和>=
结束月份都包含在该期间中。如果不包括一个或两个结束月份,则可以调整代码。
推荐阅读
- sql - 从系统日期减去 14 天
- arrays - 在“UIPickerView”功能设置上接收错误
- c# - 打开文本编辑器时读取、写入、修改
- c# - serverless.template 中的 aws VS2017 无服务器应用程序语法以将过滤器添加到 s3 通知
- python - 熊猫数据框在跳过空白值的同时将数据提取到新列中
- java - 在 AndroidX 中使用导航
- javascript - 为多选列表中的每个选定元素打开新窗口?
- node.js - 运行 forEach 后返回变量
- python - 使用 python-docx 在表格中指定边框外观
- python - 熊猫简单的成对出现