Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
从窗口第一行返回值。
FIRST_VALUE( [ ALL ] expression [ { RESPECT | IGNORE } NULLS ] ) OVER ( window-spec )
window-spec:请参见下面的注释部分
expression 要计算的表达式。例如,列名。
窗口第一行中值的数据类型。
FIRST_VALUE 函数使您不用自连接就能(依照某种排序)选择表中的第一个值。如果您希望使用第一个值作为计算的基准,此函数很有价值。
FIRST_VALUE 函数从窗口提取第一个记录。然后针对第一个记录计算 expression 并返回结果。
如果指定 IGNORE NULL,则返回 expression 的第一个非 NULL 值。如果指定 RESPECT NULLS(缺省值),则会返回第一个值,无论其是否为 NULL。
FIRST_VALUE 函数与其它大多数集合函数的不同之处在于:该函数只能与窗口说明一起使用。
可以在函数语法中指定 window-spec 的元素(内置),也可以将这些元素与 SELECT 语句中的 WINDOW 子句一并加以指定。WINDOW 子句的 window-spec 定义中提供了更多信息。请参见WINDOW 子句。
有关在 SELECT 语句中使用窗口函数的详细信息(包括工作示例),请参见窗口函数。
有关在 OVER 子句中指定窗口说明的详细信息,请参见窗口定义:内置使用 OVER 子句和 WINDOW 子句。
SQL/2008 服务商扩充。
SQL Anywhere 支持 SQL/2008 语言功能 F441 "扩展集函数支持",它允许窗口函数的操作数是列引用以外的任意表达式。
SQL Anywhere 不支持可选的 SQL/2008 功能 F442 "集函数中的混合列引用"。SQL Anywhere 不允许集合函数参数既含有来自包含 FIRST_VALUE 函数的查询块的列引用,又含有外部引用。有关示例内容,请参见AVG 函数 [Aggregate]。
以下示例返回每个雇员的工资和同一部门中最近雇用的雇员的工资之间的关系,以百分比表示:
SELECT DepartmentID, EmployeeID, 100 * Salary / ( FIRST_VALUE( Salary ) OVER ( PARTITION BY DepartmentID ORDER BY StartDate DESC ) ) AS percentage FROM Employees;
雇员 1658 是部门 500 的第一行,表示他们是该部门中最近雇用的雇员,且其百分比为 100%。相对于雇员 1658 的百分比计算部门 500 中其余雇员的百分比。例如,雇员 1570 的收入大约是雇员 1658 的收入的 139%。
如果同一部门中其他雇员的工资与最近雇用的雇员的工资相同,则他们的百分比也是 100%。