📜  sql 选择每组的第一条和最后一条记录 - SQL (1)

📅  最后修改于: 2023-12-03 14:47:38.644000             🧑  作者: Mango

SQL 选择每组的第一条和最后一条记录

在实际的数据库应用中,我们经常会遇到需要选取每个组的第一条和最后一条记录的需求。这个问题在关系型数据库中是很常见的,我们可以通过使用GROUP BY子句和聚合函数来实现。

选择每组的第一条和最后一条记录的SQL语句
选择每组的第一条记录

要选择每个组的第一条记录,我们可以使用如下SQL语句:

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY sort_column) AS row_num
    FROM table_name
) AS subquery
WHERE row_num = 1;

该SQL语句使用了ROW_NUMBER()窗口函数来为每个分组按照指定的排序列进行排序,并为每个行指定一个行号。最后我们在子查询中选择行号为1的行作为每个组的第一条记录。

选择每组的最后一条记录

要选择每个组的最后一条记录,我们可以使用如下SQL语句:

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY sort_column DESC) AS row_num
    FROM table_name
) AS subquery
WHERE row_num = 1;

该SQL语句与选择每组的第一条记录的SQL语句类似,只不过我们通过在ORDER BY子句中使用DESC关键字来将排序顺序倒序,这样就可以为每个分组按照指定的排序列逆序排序,并在子查询中选择行号为1的行作为每个组的最后一条记录。

举个例子

假设我们有一个名为"employee"的表,其中包含以下字段:employee_id、group_id、name、salary。现在我们想要选择每个组的第一条和最后一条记录。我们可以使用如下SQL语句:

选择每个组的第一条记录
SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY salary) AS row_num
    FROM employee
) AS subquery
WHERE row_num = 1;
选择每个组的最后一条记录
SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY salary DESC) AS row_num
    FROM employee
) AS subquery
WHERE row_num = 1;

以上两个SQL语句可以帮助我们选择每个组的第一条和最后一条记录。

总结

本篇文章介绍了如何使用SQL语句选择每组的第一条和最后一条记录。这个问题在实际的数据库应用中是很常见的,掌握了本文介绍的SQL语句,可以帮助我们更好地处理这类问题。