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

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

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

【问题讨论】:

标签: mysql sql datetime window-functions gaps-and-islands


【解决方案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 函数有点陌生,以后需要很多帮助。这也是我关于stackoverflow的第一个问题。很高兴看到这样的帮助和支持。干杯人!祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 2016-01-17
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多