我正在尝试获取查询的行。其中每组 id 的最小 end_date 中的行 value1、value2 等于最大 end_date。
我当前的查询只获取查询结果中最大end_date的行value1、value2:
select a.id, a.end_date, a.value1, a.value2
from table1 as a
inner join (
select id, max(end_date) as end_date
from database1
group by id
) as b
on a.id = b.id and a.end_date = b.end_date
order by id, end_date
此结果获取最新记录,但我希望获取 min(end_date = max(end_date) 中 value1 和 value2 的行,按 id 分组。
这是一个示例查询,详细说明了我想要获取的内容:
根据之前的查询,我需要获取的查询如下:
因此,我再次需要 min(end_date) = max(end_date) 中 value1、value2 的行,并按 id 分组。
最佳答案
您可以使用 row_number() 来完成
select id, end_date, value1, value2
from (
select t1.*, row_number() over(partition by t1.id order by t1.end_date) rn
from tbl t1
join (
select id, end_date, value1, value2
from (
select t.*, row_number() over(partition by id order by end_date desc) rn
from tbl t
) t
where rn = 1
) t2 on t1.id = t2.id and t1.value1 = t2.value1 and t1.value2 = t2.value2
) t
where rn = 1
关于sql - 如何获取每组的最小日期行的值等于最大日期中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71378184/