Oracle—基于上一列和下一列的计数



我有一个关于oracle数据库查询的非常不寻常的问题。

有人问我,是否有可能获得患者在48/72小时内出院的同一车站复诊的病例数。

考虑以下示例:

从2020-01-03 20:10:00[/tr>
案例 站点
1 Stat_12020-01:04 17:40:00
1 Stat_2 2020-01-04 17:40:00 2020-01:05 09:35:00
1 Stat_1 2020-01-10 12:33:00

您需要一个partition by子句来检索同一站点中同一用户的上次出院日期。然后,您可以在外部查询中进行筛选:

select count(*) as cnt
from (
select case_no, station, dt_from, dt_to
lag(dt_to) over(partition by case_no, station order by dt_from) as lag_dt_to
from mytable t
) t
where dt_from < lag_dt_to + 2

这统计了有多少行与同一站点中同一用户的上一次出院日期之间的间隔小于2天。

这假设你的are将你的日期字符串为dates。如果你有timestamps,你需要区间算法,所以:

where dt_from < lag_dt_to + interval '2' day

注意,casefromto是Oracle中的保留字:我在查询中使用了备用名称。

最新更新