【发布时间】:2021-05-03 14:20:56
【问题描述】:
我已经为这个问题苦苦挣扎了很长一段时间,但我相信有办法解决这个问题。我有一张桌子,上面有我们设施的住宿记录。每行都有一个clientID、rowID、一个开始日期、一个结束日期、一个类型和上次停留的rowID。
类似这样的:
| Client id | stayId | previous_stay | start_date | end_date | type |
|---|---|---|---|---|---|
| 1 | 101 | null | 1-1-2010 | 20-6-2010 | A |
| 1 | 105 | 101 | 1-7-2010 | 30-12-2020 | B |
| 1 | 108. | null | 8-10-2012 | 10-12-2012 | B |
我想写一个查询来为我们拥有的每个客户得到这样的结果
| Client id | stayId | first_stay | start_date | end_date | types |
|---|---|---|---|---|---|
| 1 | 105 | 101 | 1-1-2010 | 30-12-2010 | 2 |
| 1 | 108 | null | 8-10-2012 | 10-12-2012 | 1 |
我认为最好的方法是递归 sql 查询,但我真的不知道该怎么做,谁能帮助我? 我正在使用 oracle sql
【问题讨论】:
-
2010 是否在所需输出的 end_date 中有错字?除此之外-这里的“递归”或“分层”是什么?无需进一步解释,您似乎只需要一个简单的聚合 - 正如 Gordon Linoff 在他的回答中已经证明的那样。
-
我将问题编辑得更准确,我需要对上一个逗留列进行递归
-
编辑后的输出没有意义。对于stayid = 108,为什么first_stay为空?该序列中的第一次停留是 108,而不是空值(至少,根据您显示的第一对停留的“首次停留”来判断)。此外,您在 2020 年的输入和 2010 年的输出之间仍然存在差异。您的意思是输入中的 2010,end_date,第二行?