【发布时间】:2015-08-19 10:06:46
【问题描述】:
我有一个看起来像这样的表:
| ID | FROM_DATE | TO_DATE |
------------------------------
| 1 | 1/1/2001 | 2/1/2001|
| 1 | 2/1/2001 | 3/1/2001|
| 1 | 2/1/2001 | 6/1/2001|
| 1 | 3/1/2001 | 4/1/2001|
| 2 | 1/1/2001 | 2/1/2001|
| 2 | 1/1/2001 | 6/1/2001|
| 2 | 2/1/2001 | 3/1/2001|
| 2 | 3/1/2001 | 4/1/2001|
已经按ID、From_Date、To_date排序。
我想要做的是删除上一行中from_date 早于to_date 并且ID 等于上一行中的ID 的行。所以在这个例子中,我将只删除 3rd 和 6th 行。
我知道我需要某种循环结构来完成此操作,但我不知道如何实现,因为我实际上是一次查看两行。如何在 Oracle 中完成此任务?
编辑:使用 'LAG' 功能更快更容易,我最终也删除了 4th 和 7th 行 - 这不是我想要做的.例如,当它到达 row 4 时,它应该比较 row 2 中的 'from_date' 和 'to_date'(而不是第 3 行,因为第 3 行应该是已删除)。
【问题讨论】:
标签: sql oracle loops date sql-delete