如何从数据表中获取指定日期的最近前置日期?
问题分析
你需要从给定数据表中,针对指定员工(empno=1)筛选出小于等于目标日期(2022-08-22)的最大日期,也就是该员工最近的一条不晚于目标日期的记录。
原始数据表
| empno | date |
|---|---|
| 1 | 2022-08-20 00:00:00 |
| 1 | 2022-08-19 00:00:00 |
| 1 | 2022-08-18 00:00:00 |
| 1 | 2022-08-17 00:00:00 |
解决方案
方式1:通用SQL(适配绝大多数数据库)
直接通过过滤+聚合函数实现,逻辑简单高效:
SELECT MAX(date) AS target_date FROM your_table_name WHERE empno = 1 AND date <= '2022-08-22';
逻辑说明:先筛选出员工1且日期不晚于目标日期的所有记录,再通过MAX()函数取其中最大的日期值,即为你需要的结果。
方式2:窗口函数(适配多员工批量查询场景)
如果需要同时处理多个员工的类似需求,可使用窗口函数分组处理:
SELECT DISTINCT empno, FIRST_VALUE(date) OVER (PARTITION BY empno ORDER BY date DESC) AS target_date FROM your_table_name WHERE date <= '2022-08-22' AND empno = 1;
逻辑说明:按员工分组,将符合条件的日期倒序排列,取每组的第一个值,就是该员工最近的符合条件的日期。
内容的提问来源于stack exchange,提问作者Niki_S
相关产品推荐
相关产品推荐

