仅当与当前行不同时才从先前行中获取值[MySQL] [关闭]

Posted

技术标签:

【中文标题】仅当与当前行不同时才从先前行中获取值[MySQL] [关闭]【英文标题】:Fetching values from previous rows only if it is different from the current row [MySQL] [closed] 【发布时间】:2020-12-18 08:26:32 【问题描述】:

这是针对单个患者的表格的一部分,其中我们有一些患者及其当前的 Rx 填充日期、药物名称和其他一些内容。所以基本上,您会看到“Prev_Other_Drug_Date”列,其中包含与当前药物不同的最后处方药物的日期。所以对于前 3 行,它是空的,因为 drug_names 是相同的“AKSTRIA”。对于 Row_Num 5,我们有最后一个药物的日期,它与以前的药物不同。

我不明白我应该如何继续实现这一目标。任何帮助将不胜感激。

【问题讨论】:

欢迎来到 SO!,问题编辑器为您提供“绘制”表格的工具。请使用它而不是链接图像。 见meta.***.com/questions/333952/…,请勿发文字图片 【参考方案1】:

您可以将其视为差距和孤岛问题。这是一个使用窗口函数的解决方案:

select t.*,
    max(lag_fill_dt) over(partition by patient_id, grp) as prev_other_drug_date
from (
    select t.*,
        count(lag_fill_dt) over(partition by patient_id order by fill_dt) as grp
    from (
        select t.*, 
            case when drug_name <> lag(drug_name) over(partition by patient_id order by fill_dt)
                then lag(fill_dt) over(partition by patient_id order by fill_dt) 
            end as lag_fill_dt
        from mytable t
    ) t
) t

想法是将当前的药物名称与同一患者的前一行进行比较;如果它们不同,则我们保留前一个日期。然后我们可以使用另一层嵌套来为每个组带来最新的非空日期。

【讨论】:

非常感谢。这是完美的,绝对是我想要的。 完成了。再次感谢。基本上,我对 Window 函数有点陌生,以后需要很多帮助。这也是我关于***的第一个问题。很高兴看到这样的帮助和支持。干杯人!祝你有美好的一天!

以上是关于仅当与当前行不同时才从先前行中获取值[MySQL] [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

仅当与 table2 中的 column3 匹配时才更新 table1 中的 column1

MongoDB 聚合:从先前行的总和计算运行总计

仅当行不存在时才附加到 csv

仅当行不存在时才插入 SQL

MySQL 时间序列数据库,跟踪数量/价格/数据历史——仅当新值与前一个不同时才插入新行?

仅当数据集中另一个字段不同时才计算字段的表达式