我有一个关于oracle数据库查询的非常不寻常的问题。
有人问我,是否有可能获得患者在48/72小时内出院的同一车站复诊的病例数。
考虑以下示例:
案例 | 站点 | 从到 | ||
---|---|---|---|---|
1 | Stat_1 | 2020-01-03 20:10:002020-01:04 17:40:00 | [/tr>||
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将你的日期字符串为date
s。如果你有timestamp
s,你需要区间算法,所以:
where dt_from < lag_dt_to + interval '2' day
注意,case
、from
和to
是Oracle中的保留字:我在查询中使用了备用名称。