运行 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
我有一个 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