【问题标题】:Oracle - Count based on previous and next columnOracle - 根据上一列和下一列计数
【发布时间】:2021-03-19 15:33:26
【问题描述】:

我有一个关于使用 oracle 进行数据库查询的相当不寻常的问题。

我被问到是否有可能获得患者在 48 / 72 小时内从他们出院的同一站恢复的病例数。

考虑以下示例:

Case Station From To
1 Stat_1 2020-01-03 20:10:00 2020-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-05 09:35:00 2020-01-10 12:33:00

在这个例子中,我必须检查他在 1 号站再次登记时的最后一次出院时间与第一次入院时间之间的差异。这应该算作一次重新入院。

我用LAGLEAD 尝试了一些东西,但你不能在WHERE-Clause 中使用它们,所以我猜这不太有用。

LAG (o.OEBENEID, 1, 0) OVER (ORDER BY vfs.GUELTIG_BIS) AS Prev_Stat,
LEAD  (o.OEBENEID, 1, 0) OVER (ORDER BY vfs.GUELTIG_BIS) AS Next_Stat,
LAG (vfs.GUELTIG_BIS, 1) OVER (ORDER BY vfs.GUELTIG_BIS) AS End_Prev_Stat,
LEAD (vfs.GUELTIG_AB, 1) OVER (ORDER BY vfs.GUELTIG_AB) AS Begin_Next_Stat

我能够获得旧值,但我无法计算这两个日期之间的差异。

这甚至有可能实现吗?我真的不知道如何使用 SQL 来完成。

提前致谢!

【问题讨论】:

    标签: sql oracle datetime subquery where-clause


    【解决方案1】:

    您需要一个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天。

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

    where dt_from < lag_dt_to + interval '2' day
    

    请注意,casefromtoreserverd words in Oracle:我在查询中使用了替代名称。

    【讨论】:

    • 谢谢,我没有考虑分区条款。正是我需要的! :)
    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多