我正在设置每行= 1小时的时间序列。 输入数据有时每小时具有多个值。这可能会有所不同。
现在特定的代码如下:
select
patientunitstayid
, generate_series(ceil(min(nursingchartoffset)/60.0),
ceil(max(nursingchartoffset)/60.0)) as hr
, avg(case when nibp_systolic >= 1 and nibp_systolic <= 250 then
nibp_systolic else null end) as nibp_systolic_avg
from nc
group by patientunitstayid
order by patientunitstayid asc;
并生成以下数据:
它采用每个患者的整个时间序列的平均值,而不是每个小时的平均值。我该如何解决?
答案 0 :(得分:1)
我期望这样的事情:
select nc.patientunitstayid, gs.hr,
avg(case when nc.nibp_systolic >= 1 and nc.nibp_systolic <= 250
then nibp_systolic
end) as nibp_systolic_avg
from (select nc.*,
min(nursingchartoffset) over (partition by patientunitstayid) as min_nursingchartoffset,
max(nursingchartoffset) over (partition by patientunitstayid) as max_nursingchartoffset
from nc
) nc cross join lateral
generate_series(ceil(min_nursingchartoffset/60.0),
ceil(max_nursingchartoffset/60.0)
) as gs(hr)
group by nc.patientunitstayid, hr
order by nc.patientunitstayid asc, hr asc;
也就是说,您需要按hr
进行汇总。我将其放在from
子句中,以突出显示这会生成行。如果使用的是Postgres的旧版本,则可能没有横向连接。如果是这样,只需在from
子句中使用子查询即可。
编辑:
您也可以尝试:
from (select nc.*,
generate_series(ceil(min(nursingchartoffset) over (partition by patientunitstayid) / 60.0),
ceil(max(nursingchartoffset) over (partition by patientunitstayid)/ 60.0)
) hr
from nc
) nc
并在外部查询中调整对hr
的引用。