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

Fetching values from previous rows only if it is different from the current row [MySQL]

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

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

您可以将其视为间隙和孤岛问题。这是使用 window 函数的解决方案:

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

思路是比较同一患者当前行和上一行的药品名称;如果它们不同,那么我们保留以前的日期。然后我们可以使用另一层嵌套来为每个组带来最新的非空日期。