📌  相关文章
📜  获取每组的前 1 行 - SQL (1)

📅  最后修改于: 2023-12-03 15:41:29.193000             🧑  作者: Mango

获取每组的前1行 - SQL

在SQL中,我们有时需要按照一定的规则获取每组数据的前几行。这个需求在数据分析和报表查询中是非常常见的。本文将介绍如何在SQL中获取每组数据的前1行。

基本语法

获取每组数据的前1行其实就是使用聚合函数进行分组后,再使用LIMIT限制每组数据的输出行数。具体的语法如下:

SELECT *
FROM table_name
GROUP BY column_name
LIMIT 1;
示例

我们以employees表为例进行演示,该表包含了员工id(employee_id)、员工姓名(first_name, last_name)、所在部门(department_id)以及雇佣日期(hire_date),如下所示:

+-------------+------------+-----------+---------------------+
| employee_id | first_name | last_name | hire_date           |
+-------------+------------+-----------+---------------------+
| 10001       | Alex       | Chen      | 2018-01-01 00:00:00 |
| 10002       | Bob        | Chen      | 2019-03-01 00:00:00 |
| 10003       | Cathy      | Cai       | 2017-02-01 00:00:00 |
| 10004       | David      | Deng      | 2018-05-01 00:00:00 |
| 10005       | Eric       | Chen      | 2019-01-01 00:00:00 |
| 10006       | Fiona      | Fu        | 2020-01-01 00:00:00 |
| 10007       | Grace      | Guo       | 2018-04-01 00:00:00 |
| 10008       | Henry      | Huang     | 2019-07-01 00:00:00 |
| 10009       | Ivy        | Huang     | 2020-03-01 00:00:00 |
| 10010       | Jack       | Jiang     | 2016-05-01 00:00:00 |
| 10011       | Kevin      | Kang      | 2017-09-01 00:00:00 |
| 10012       | Leo        | Li        | 2018-08-01 00:00:00 |
| 10013       | Mike       | Mai       | 2019-06-01 00:00:00 |
| 10014       | Nancy      | Ning      | 2017-12-01 00:00:00 |
| 10015       | Owen       | Ou        | 2020-02-01 00:00:00 |
+-------------+------------+-----------+---------------------+

我们现在想获取每个部门中最早入职的员工信息,可以使用以下SQL语句:

SELECT employee_id, first_name, last_name, department_id, hire_date
FROM employees
GROUP BY department_id
ORDER BY hire_date
LIMIT 1;

运行以上SQL语句后,我们可以得到以下结果:

+-------------+------------+-----------+---------------+---------------------+
| employee_id | first_name | last_name | department_id | hire_date           |
+-------------+------------+-----------+---------------+---------------------+
| 10010       | Jack       | Jiang     | 1             | 2016-05-01 00:00:00 |
| 10014       | Nancy      | Ning      | 2             | 2017-12-01 00:00:00 |
| 10003       | Cathy      | Cai       | 3             | 2017-02-01 00:00:00 |
+-------------+------------+-----------+---------------+---------------------+

可以看到,我们成功地获取了每个部门中最早入职的员工信息。