【问题标题】:SQL for creating a range用于创建范围的 SQL
【发布时间】:2015-09-15 15:56:27
【问题描述】:

我有下表,有 2 列

Dept   |   Term  

A      |    2010
A      |    2011
B      |    2012
C      |    2013

我想创建一个最大值和最小值列,这样输出应该如下表所示。可以使用 min() 函数并按术语列分组来获得最小值。最大值应该是下一组的最小值。

Dept   |   min_Term  | max_term

A      |    2010     |  2012
B      |    2012     |  2013
C      |    2013     |  Null

提前感谢您的帮助!

【问题讨论】:

  • 如果有E 部门但没有D 会发生什么

标签: sql database oracle11g


【解决方案1】:

您可以使用lead 函数从下一行获取最小项值。

with t1 as (
select dept, min(term) mnterm
from table
group by dept)
, t2 as (select dept, mnterm as min_term, lead(mnterm) over(order by dept) as max_term
         from t1)
select * from t2;

【讨论】:

    【解决方案2】:

    您可以像这样一次性组合聚合函数和分析函数:

    select dept
         , min(term) min_term
         , lead(min(term)) over (order by dept) max_term
      from table
     group by dept;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-10
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多