sql - 如何查找 Oracle 表中的月份间隔?

标签 sql oracle gaps-and-islands

我有一个 Oracle 表,其中包含 EmpName(字符)、Month_from 和 Month_to 列(数字)。在这里我需要找到缺失的月份(月份差距)。在下面的示例数据中,我必须找到缺失的第 6 个月(6 月)。

提前致谢。

Sample Data:

|-------|-----------|--------|
|eName  |Month_From |Month_To|
|(Char) | ( Int)    | ( Int) |
|-------|------------|-------|
|John   |1          |2       | ( Jan to Feb)
|John   |3          |5       | ( Mar to May)
|John   |7          |8       | ( Jul to Aug)    
|-------|------------|-------|

需要查找(Jun 到 Jun)。

最佳答案

假设没有重叠,您可以使用 lag() 找到缺失的月份:

select (prev_month_to + 1) as start_missing,
       (month_from - 1) as end_missing
from (select t.*, lag(month_to) over (partition by name order by month_from) as prev_month_to
      from t
     ) t
where prev_month_to <> month_from - 1;

这为每个差距提供了一个范围,因为差距可能超过一个月。

关于sql - 如何查找 Oracle 表中的月份间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47160028/

相关文章:

sql - T-SQL 按条件对数据进行分组

python - 如何在 pandas 中进行条件转置(类似于使用 group by 时的 SQL 情况)

sql - 在 Oracle 中将列设为 READONLY 的最简单方法是什么?

mysql - 如何在 MySQL 中使用 LAST_INSERT_ID 关键字传递表名?

c# - 如何将 Oracle 异常消息与字符串进行比较?

sql - 获取列中允许的最大长度 |甲骨文

sql - 在 SQL (Oracle) 中将行划分为特定列

sql - 确定一个范围是否完全被一组范​​围覆盖

java - JPA/JPQL 查询错误

sql - 使用 SQL 对共享共同状态的连续项目进行分组(包括虚拟数据)