* from empsalary;
计算某个值在一组行中的相对位置。

select ntile(3) over (partition by depnameorder by salary desc),* from empsalary;
从1到当前值,除以分组的的数量,尽可能使分布平均

select lag(salary,2,NULL) over(partition bydepname order by salary desc),* from empsalary;
偏移量函数,取滞后值,如lag(column_name,2,0)表示字段偏移量为2,没有则用default值代替,这里是0,不写默认是null
select first_value(salary) over(partition bydepname order by salary desc),* from empsalary;
从窗口第一行返回值。
注释
FIRST_VALUE函数使您不用自连接就能(依照某种排序)选择表中的第一个值。如果您希望使用第一个值作为计算的基准,此函数很有价值。
FIRST_VALUE函数从窗口提取第一个记录。然后针对第一个记录计算 expression 并返回结果。
如果指定 IGNORE NULL,则返回 expression 的第一个非 NULL 值。如果指定 RESPECT NULLS(缺省值),则会返回第一个值,无论其是否为 NULL。
FIRST_VALUE 函数与其它大多数集合函数的不同之处在于:该函数只能与窗口说明一起使用。

select last_value(salary) over (partition bydepname ),* from empsalary;
从窗口最后一行返回值。
注释
LAST_VALUE函数使您不用自连接就能(依照某种排序)选择表中的最后一个值。如果您希望使用最后一个值作为计算的基准,此函数很有价值。
LAST_VALUE函数在完成 ORDER BY 后从分区提取最后一个记录。然后针对最后一个记录计算 expression 并返回结果。
如果指定 IGNORE NULL,则返回 expression 的最后一个非 NULL 值。如果指定 RESPECT NULLS(缺省值),则会返回最后一个值,无论其是否为 NULL。
LAST_VALUE函数与其它大多数集合函数的不同之处在于:该函数只能与窗口说明一起使用。

select nth_value(salary,2) over (partition by depname order by salary),* fromempsalary;
返回窗口框架中的指定值,如nth_value(salary,2),则表示返回字段salary的第二个窗口函数值

主意last_value()和first_value()函数的运用,当使用order by 只会对当前行排序。例如:

修改为order by的范围:
