为此苦苦挣扎。我需要返回最大日期,在某些情况下按1列将其分组,在第二列中将第二个最大日期返回。由于日期中有间隔,因此我无法使用DATEADD函数。所需的输出将具有三列(将因子分组,最大日期,第二大日期)和许多行。谢谢。
答案 0 :(得分:0)
通用方法是使用row_number()
和聚合。像这样:
select factor, max(date), min(date)
from (select t.*, row_number() over (partition by factor order by date) as seqnum
from t
) t
where seqnum <= 2
group by factor;
如果重复,则它将两次返回相同的日期。如果要使用其他日期,请使用dense_rank()
代替row_number()
。
答案 1 :(得分:0)
根据您的数据库,您也许可以使用Oracle中的NTH_VALUE
函数之类的分析函数:
select partition_cols, max(date1) date1, max(date2) date2
from (
select partition_cols
, NTH_VALUE(Date_Col, 1) over (partition by partition_cols order by ...
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) date1
, NTH_VALUE(Date_Col, 2) over (partition by partition_cols order by ...
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) date2
from your_data) t
group by partition_cols
答案 2 :(得分:0)
另一种替代方法类似于戈登的替代方案,但使用枢轴:
with t1 as (
select factor
, row_number() over (partition by factor order by your_date) rn
, your_date
from Your_Data
)
select * from t1 pivot (max(your_date) for rn in (1, 2)) x