运行 select 多个子组

run select on multiple subgroups

我有一个 table 说
名称、外键、日期开始、日期结束

我想select每个外键尚未结束的最新项目。 约会 2020.07.02 所以如果 table 是:

name |FK| datestart |dateend
a    | 1| 2020.01.01| 2020.06.01  
b    | 1| 2020.02.01| 2020.07.01  
c    | 1| 2020.02.15| 2020.08.01  
d    | 1| 2020.02.01| 2020.09.01  
e    | 2| 2020.01.01| 2020.06.01  
f    | 2| 2020.02.01| 2020.08.01  
g    | 2| 2020.06.01| 2020.08.01  
h    | 2| 2020.02.01| 2020.09.01  

我想要结果

name |FK| datestart |dateend
c    | 1| 2020.02.15| 2020.08.01  
g    | 2| 2020.06.01| 2020.08.01  

我可以在一条语句中做到这一点吗?

我可以用

select name from table
where datestart <= 'date'
and datestart = (
Select max( datestart ) FROM table
where 'date' >= dateend
AND ( dateend is null or 'date' <= dateend))
name |FK| datestart |dateend
g    | 2| 2020.06.01| 2020.08.01  

到 select 最近可行的结果。但我需要为每个组做一次。

您可以使用解析函数如下:

select * from
(select t.*, 
        row_number() over (partition by ForeignKey order by datestart desc) as rn 
   from table t
  where datestart <= 'date') t
where rn = 1