以上是该表的一个示例,但是具有代表性,我想返回下一个结果:(应该按VisId分组),我需要返回:第一个prop11(基于date_time),第一个非'root'prop11(基于date_time)和最后一个prop11(基于date_time)。
因此,对于这种情况,我需要在一行中返回:'Root','Mkge','root'。 (在一行中,3列)。我怎样才能做到这一点? (我用三重自联接实现了它,但我认为可能有一种更高效的方式)。
答案 0 :(得分:0)
使用common table expression多个row_number()
和条件聚合:
cte
没有select
VisId
, FirstProp = max(case when rn_asc = 1 then date_time end)
, FirstNonRoot = max(case when rn_mkge = 1 then date_time end)
, LastProp = max(case when rn_desc = 1 then date_time end)
from (
select *
, rn_asc = row_number() over (partition by VisId order by date_time asc)
, rn_desc = row_number() over (partition by VisId order by date_time desc)
, rn_mkge = case when prop11 <> 'Root'
then row_number() over (partition by VisId order by date_time asc)
end
from t
) s
group by VisId
:
res3 = summary_col([res1,res2],stars=True,float_format='%0.2f',
info_dict={'R2':lambda x: "{:.2f}".format(x.rsquared)})
f = open('res3.tex', 'w')
f.write(res3.as_latex())
f.close()