【发布时间】:2019-11-11 23:16:52
【问题描述】:
我有一个表“日期”,其中 2 列表示对象描述有效的日期,以及直到它有效的日期(valid_from & valid_to),如下所示:
ID valid_from valid_to removed
1 2019-06-27 - false
1 - 2019-06-26 true
1 2019-05-16 - false
1 2019-05-08 - false
1 2019-05-07 - false
我需要做的是为所有这些行获取明确的时间间隔,为每一行定义一个 valid_from 和 valid_to。
Valid_to 日期对应于删除最接近valid_from 日期的记录,因此应将这两行合并为一行,保留removed=true 值(尽管这不是优先级)。在这种情况下,例如,应折叠第 2 行和第 3 行。
然后,对于 valid_to 为 NULL (removed=false) 的每一行,应插入比该行的 valid_from 大的最接近的 valid_from 日期。 最近的行(即第一行)后面不会有记录,因此 valid_to 日期将保持为 NULL。
因此,产生的结果将是:
ID valid_from valid_to removed
1 2019-06-27 - false
1 2019-05-16 2019-06-26 true
1 2019-05-08 2019-05-16 false
1 2019-05-07 2019-05-08 false
这不能通过硬编码值或条件限制来完成,因为这只是一个更大的表的一部分,并且应该为每个 ID 组执行操作。
我尝试在 INSERT INTO 语句中的子查询上使用 TOP 语句,但不知道如何对实现此结果所需的进程进行排序。
我们将不胜感激。 谢谢。
【问题讨论】:
-
我特别没有包括一个,因为我没有使用它们,我正在为公司数据库使用特定的 SQL 改编。不过,我还没有找到缺失的功能,所以我认为几乎任何答案都适合我。
-
TOP不是标准的 SQL 开头... -
正确...它确实混合了一些功能。也许我不能尽可能多地指定查询...我应该删除@a_horse_with_no_name 吗?
标签: sql