如何为TABLE1添加按学生分组的最小日期列WANT?
实现每个学生对应最小日期的列填充
需求说明
现有TABLE1表结构及数据如下:
TABLE1 STUDENT SUBJECT DATE WANT 1 HISTORY 1/1/2020 11/3/2019 1 HISTORY 11/3/2019 11/3/2019 1 HISTORY 12/1/2021 11/3/2019 2 HISTORY 3/4/2019 3/4/2019 2 HISTORY 2/6/2021 3/4/2019 3 HISTORY 1/8/2022 1/8/2022
需要为每条记录新增WANT列,值为对应STUDENT的最小DATE值。
解决方案
方法1:关联分组查询结果(JOIN方式)
将你已写出的分组查询作为子查询,通过STUDENT字段与原表关联,即可把最小日期匹配到每一行记录:
SELECT t1.STUDENT, t1.SUBJECT, t1.DATE, t2.MIN_DATE AS WANT FROM TABLE1 t1 JOIN ( SELECT STUDENT, MIN(DATE) AS MIN_DATE FROM TABLE1 GROUP BY STUDENT ) t2 ON t1.STUDENT = t2.STUDENT;
方法2:窗口函数(简洁高效)
使用MIN() OVER()窗口函数,直接按STUDENT分组计算最小日期,无需额外关联操作,适合大多数现代数据库(如MySQL 8.0+、PostgreSQL、SQL Server等):
SELECT STUDENT, SUBJECT, DATE, MIN(DATE) OVER(PARTITION BY STUDENT) AS WANT FROM TABLE1;
方法3:关联子查询
在SELECT子句中直接通过子查询获取当前行对应学生的最小日期:
SELECT STUDENT, SUBJECT, DATE, (SELECT MIN(DATE) FROM TABLE1 WHERE STUDENT = t1.STUDENT) AS WANT FROM TABLE1 t1;
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

