Oracle SQL如何获取最小日期及对应名称(附示例表)
Oracle SQL获取最小日期对应名称的解决方案
示例表

嗨,我来帮你搞定这个问题!根据你的需求——要从表中取出最小日期对应的名称,最终返回3行(Ram1行 + def2行),这里给你一个精准的实现方法:
推荐使用窗口函数实现
因为你需要保留同一名称下所有等于最小日期的记录(比如def有两条记录都是它的最早日期,所以都要返回),用RANK()窗口函数是最合适的,它能确保同组内所有最小日期的行都被筛选出来。
假设你的表名为your_table,名称列是name,日期列是event_date,执行以下SQL:
SELECT name, event_date FROM ( SELECT name, event_date, -- 按名称分组,对日期升序排名,最小日期的行排名为1 RANK() OVER (PARTITION BY name ORDER BY event_date ASC) AS date_rank FROM your_table ) ranked_data WHERE date_rank = 1;
逻辑说明
PARTITION BY name:把数据按名称分组,每个名称单独处理ORDER BY event_date ASC:对每个组内的日期按从小到大排序,最小的日期排在最前面RANK():如果同一名称下有多条记录的日期都是最小日期,这些记录的排名都会是1,最终都会被筛选出来
这样执行后,就会得到你预期的结果:Ram的1条最小日期记录,加上def的2条最小日期记录,总共3行数据。如果你的表字段名或者表名不一样,只需要把your_table、name、event_date替换成你实际的字段/表名就行啦~
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

