【发布时间】:2020-12-30 10:14:03
【问题描述】:
让我解释一下目前的情况:
表结构和数据概览:
我有一张表,其中包含每种药物的患者 ID、药物名称、情节编号及其开始和结束日期。这是只有一个病人的快照。所以这个病人正在使用 2 种药物 X 和 Y。药物 X 的第一集开始于 2013 年 1 月 22 日,结束于 2013 年 4 月 22 日。同样,由于第二个药物也是药物 X,所以它是第二集。换药时视为新药的首发,以此类推。
| PATIENT_ID | DRUG | EPISODE | EPISODE_START | EPISODE_END |
|---|---|---|---|---|
| 773 | X | 1 | 2013-01-22 00:00:00 | 2013-04-22 00:00:00 |
| 773 | X | 2 | 2013-06-02 00:00:00 | 2014-03-12 00:00:00 |
| 773 | Y | 1 | 2013-10-28 00:00:00 | 2014-01-22 00:00:00 |
要求:
我需要为每位患者制定药物治疗方案。我将解释如何:
如果我们将这些数据绘制在一个时间轴上,我们会得到这样的结果:
现在需要按以下顺序创建方案:
在这种情况下,方案将是在特定时间段内使用的药物的组合。
方案 1:药物 X,日期为 2013-01-22 至 2013-04-22,
方案 2:药物 X,日期为 2013-06-22 至 2013-10-28,
方案 3:药物 X+Y 从日期 2013-10-28 到 2014-01-22,最后
方案 4:药物 X,日期为 2014-01-22 至 2014-03-12。
最后,表格最终会是这样的:
| PATIENT_ID | DRUG_TAKEN | REGIMEN_NO | REGIMEN_START | REGIMEN_END |
|---|---|---|---|---|
| 773 | X | 1 | 2013-01-22 00:00:00 | 2013-04-22 00:00:00 |
| 773 | X | 2 | 2013-06-02 00:00:00 | 2013-10-28 00:00:00 |
| 773 | X+Y | 3 | 2013-10-28 00:00:00 | 2014-01-22 00:00:00 |
| 773 | X | 4 | 2014-01-22 00:00:00 | 2014-03-12 00:00:00 |
注意:中间有一个日期:2013-04-22 至 2013-06-02,患者没有服用任何药物。
我不明白如何使用 group_concat 来分隔日期和组合药物。谁能帮我解决这个问题。先感谢您。
【问题讨论】:
-
你的主键是什么?
-
目前,这不包含任何主键。原因是所有数据都可能包含重复项,并且也很难创建复合键,因为同样的原因 - 重复的机会。我可以做的一件事是通过患者 ID 引入 row_numbers 分区。那么row_number和patient_id的组合可以认为是主键
-
在我看来 (patient_id,drug_taken,episode) 必须构成一个 UNIQUE 值
-
你用的是什么版本的 MySQL?
-
是的,我猜也可以使用。抱歉,我错过了。
标签: mysql group-concat