2024年10月04日 SQL多条记录 只保留最新的一条 极客笔记
在实际的数据库操作中,经常会遇到需要查询多条记录中只保留最新一条的场景。这种需求通常会出现在需要显示最新更新的数据或者只保留最近的一条记录的情况下。在这篇文章中,我将分享如何使用SQL语句来实现这个功能。
假设有一个名为employee
的员工表,表结构如下:
id | name | department | salary | update_time |
---|---|---|---|---|
1 | Alice | HR | 5000 | 2022-01-01 08:00:00 |
2 | Bob | IT | 6000 | 2022-01-02 10:00:00 |
3 | Charlie | Finance | 7000 | 2022-01-03 12:00:00 |
4 | Diana | Sales | 5500 | 2022-01-04 14:00:00 |
现在的需求是查询出每个部门最新的员工信息,并只保留最新的一条记录。
MAX
函数SELECT e1.id, e1.name, e1.department, e1.salary, e1.update_time
FROM employee e1
INNER JOIN (
SELECT department, MAX(update_time) AS max_update_time
FROM employee
GROUP BY department
) e2 ON e1.department = e2.department AND e1.update_time = e2.max_update_time;
上面的SQL语句首先通过子查询获取每个部门最新的update_time
,然后再通过INNER JOIN
将获取到的最新时间和员工表匹配,最终筛选出每个部门最新的员工信息。
ROW_NUMBER()
窗口函数WITH ranked_employee AS (
SELECT id, name, department, salary, update_time,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY update_time DESC) AS rn
FROM employee
)
SELECT id, name, department, salary, update_time
FROM ranked_employee
WHERE rn = 1;
这种方法利用ROW_NUMBER()
窗口函数按照部门分组并按照更新时间降序排列,然后保留每个部门的最新记录。
对于上述两种方法,假设在employee
表中插入一些新的员工信息后,运行结果如下:
id | name | department | salary | update_time |
---|---|---|---|---|
1 | Alice | HR | 5000 | 2022-01-01 08:00:00 |
2 | Bob | IT | 6000 | 2022-01-02 10:00:00 |
3 | Charlie | Finance | 7000 | 2022-01-03 12:00:00 |
4 | Diana | Sales | 5500 | 2022-01-04 14:00:00 |
5 | Emily | HR | 5200 | 2022-01-05 09:00:00 |
6 | Frank | IT | 6200 | 2022-01-06 11:00:00 |
7 | Grace | Finance | 7300 | 2022-01-07 13:00:00 |
8 | Henry | Sales | 5800 | 2022-01-08 15:00:00 |
经过运行上述两种方法后,最终查询结果如下:
id | name | department | salary | update_time |
---|---|---|---|---|
5 | Emily | HR | 5200 | 2022-01-05 09:00:00 |
6 | Frank | IT | 6200 | 2022-01-06 11:00:00 |
7 | Grace | Finance | 7300 | 2022-01-07 13:00:00 |
8 | Henry | Sales | 5800 | 2022-01-08 15:00:00 |
以上为运行结果,分别展示了每个部门中最新的员工信息。
在实际的数据库操作中,需要查询多条记录并只保留最新的一条是一种常见的需求。通过使用SQL语句中的子查询、MAX
函数或ROW_NUMBER()
窗口函数等方法,可以很方便地实现这一功能。根据具体的场景和需求选择合适的方法来处理数据,能够提高程序的运行效率和可读性,同时也能更好地满足业务需求。
本文链接:http://so.lmcjl.com/news/14594/