【发布时间】:2020-03-28 17:21:02
【问题描述】:
我的数据样本:
+----+------------+------------+-----------+--------------+--+
| ID | startdate | enddate | status | lengthofstay | |
+----+------------+------------+-----------+--------------+--+
| 1 | 2018-02-15 | 2018-02-16 | transfer | 1 | |
| 1 | 2018-02-16 | 2018-02-22 | discharge | 6 | |
| 2 | 2018-03-05 | 2018-03-08 | discharge | 3 | |
| 1 | 2018-11-01 | 2018-11-03 | transfer | 2 | |
| 1 | 2018-11-03 | 2018-11-20 | transfer | 17 | |
| 1 | 2018-11-20 | 2018-11-21 | discharge | 1 | |
| 2 | 2019-05-15 | 2019-05-20 | discharge | 5 | |
+----+------------+------------+-----------+--------------+--+
我想解决两个问题。 首先,我想根据匹配的 startdate 和 enddate 将具有匹配 ID 的行组合成一行,同时还取 lengthofstay 的总和(startdate 和 enddate 之间的 datediff)。 第二个问题,我有重复的 ID,这些 ID 是在以后的不同场合进入系统的,我想单独观察。
这是我理想的输出:
+----+------------+------------+-----------+--------------+
| ID | startdate | enddate | status | lengthofstay |
+----+------------+------------+-----------+--------------+
| 1 | 2018-02-15 | 2018-02-22 | discharge | 7 |
| 2 | 2018-03-05 | 2018-03-08 | discharge | 3 |
| 1 | 2018-11-01 | 2018-11-21 | discharge | 20 |
| 2 | 2019-05-15 | 2019-05-20 | discharge | 5 |
+----+------------+------------+-----------+--------------+
我在 MySQL 方面没有太多经验,我不确定这是否可以通过汇总、连接或分组来实现。我知道在不同的场合重复 ID 是一个额外的问题,所以我正在考虑根据 startdate 与每个唯一 ID 的最后一个 enddate 的距离(例如 3 天的边距)涉及另一个标识符,但我不也知道该怎么做。
我发现了一个类似的问题here,但没有答案。
感谢任何见解!
【问题讨论】:
标签: mysql sql database window-functions gaps-and-islands