LAST_VALUE

LAST_VALUE() 函数

LAST_VALUE()函数是一个窗口函数,允许您选择有序行集中的最后一行。

以下显示了LAST_VALUE()函数的语法:

LAST_VALUE (expression) OVER (
    [partition_clause]
    [order_clause]
    [frame_clause]
)

LAST_VALUE()函数返回expression有序行集的最后一行的值。

OVER有三个子句:partition_clauseorder_clause,和frame_clause

partition_clause

partition_clause语法如下:

PARTITION BY expr1, expr2, ...

PARTITION BY子句分配结果集成由一个或多个表达式指定多个分区expr1expr2LAST_VALUE()函数被独立地施加到每个分区。

order_clause

order_clause语法如下:

ORDER BY  expr1 [ASC|DESC],...

ORDER BY子句指定LAST_VALUE()函数运行的分区中行的逻辑顺序。

frame_clause

frame_clause定义了所述当前分区的所述子集LAST_VALUE()函数应用。

LAST_VALUE() 函数示例

使用的数据仍然是上面建立的 table

1)MySQL LAST_VALUE()在整个查询结果示例中

select employee_name,
       hours,
       last_value(employee_name) over (
           order by hours
           range between
               unbounded preceding and
               unbounded following
           ) highest_overtime_employee
from overtime;
undefined

在此示例中,ORDER BY子句将结果集中行的逻辑顺序指定为从低到高的小时。

默认帧规范如下:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

这意味着框架从第一行开始,到结果集的当前行结束。

因此,为了获得加班时间最长的员工,我们将框架规格更改为以下内容:

RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

这表示框架从第一行开始,到结果集的最后一行结束。

2)MySQL LAST_VALUE()上的分区示例

以下语句查找每个部门加班时间最长的员工:

select employee_name,
       department,
       hours,
       last_value(employee_name) over (
           partition by department
           order by hours
           range between
               unbounded preceding and
               unbounded following

           ) most_overtime_employee
from overtime;
undefined

在这个例子中,首先,PARTITION BY子句按部门划分了员工。然后,ORDER BY子句通过加班从低到高命令每个部门的员工。

在这种情况下,帧规范是整个分区。结果,LAST_VALUE()函数选择了每个分区中的最后一行,分区是加班时间最高的员工。

Update time: 2020-08-18

results matching ""

    No results matching ""