📜  PostgreSQL – LAST_VALUE函数

📅  最后修改于: 2022-05-13 01:57:15.670000             🧑  作者: Mango

PostgreSQL – LAST_VALUE函数

在 PostgreSQL 中,LAST_VALUE()函数返回查询结果集的有序分区中的最后一个值。

Syntax:
LAST_VALUE ( expression )  
OVER ( 
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

我们来分析一下上面的语法:

  • 该表达式是单值整数,用于针对查询结果集的有序分区中的最后一行的值进行评估。它可以是表达式、列或子查询。
  • 分区BY子句用于分隔查询结果成组。
  • ORDER BY子句是用于排序在每个分区中的结果查询集。
  • 所述frame_clause用于指定在当前分区的行的子集。

示例 1:

首先,创建两个名为Mammals 的 Animal_groups 演示:

CREATE TABLE Animal_groups (
    animal_id serial PRIMARY KEY,
    animal_name VARCHAR (255) NOT NULL
);

CREATE TABLE Mammals (
    mammal_id serial PRIMARY KEY,
    mammal_name VARCHAR (255) NOT NULL,
    lifespan DECIMAL (11, 2),
    animal_id INT NOT NULL,
    FOREIGN KEY (animal_id) REFERENCES Animal_groups (animal_id)
);


现在向表中插入一些数据:



INSERT INTO Animal_groups (animal_name)
VALUES
    ('Terrestrial'),
    ('Aquatic'),
    ('Winged');

INSERT INTO Mammals(mammal_name, animal_id, lifespan)
VALUES
    ('Cow', 1, 10),
    ('Dog', 1, 7),
    ('Ox', 1, 13),
    ('Wolf', 1, 11),
    ('Blue Whale', 2, 80),
    ('Dolphin', 2, 5),
    ('Sea Horse', 2, 3),
    ('Octopus', 2, 8),
    ('Bat', 3, 4),
    ('Flying Squirrels', 3, 1),
    ('Petaurus', 3, 2);

以下查询使用LAST_VALUE()函数返回所有哺乳动物以及寿命最长的哺乳动物:

SELECT 
    mammal_id,
    mammal_name,
    lifespan,
    LAST_VALUE(mammal_name) 
    OVER(
        ORDER BY lifespan
        RANGE BETWEEN 
            UNBOUNDED PRECEDING AND 
            UNBOUNDED FOLLOWING
    ) longest_lifespan
FROM 
    Mammals;

输出:

示例 2:

以下查询使用LAST_VALUE()函数返回所有哺乳动物以及每个动物组中寿命最长的哺乳动物:

SELECT 
    mammal_id,
    mammal_name,
    animal_id,
    lifespan,
    LAST_VALUE(mammal_name) 
    OVER(
    PARTITION BY animal_id
        ORDER BY lifespan
        RANGE BETWEEN 
            UNBOUNDED PRECEDING AND 
            UNBOUNDED FOLLOWING
    ) longest_life
FROM 
    Mammals;

输出: