跨多个日期范围计算开始日期
Posted
技术标签:
【中文标题】跨多个日期范围计算开始日期【英文标题】:Calculating Starting Date Across Multiple Date Ranges 【发布时间】:2016-03-25 16:22:41 【问题描述】:我有一段时间无法解决的 SQL 问题。我到处找都没有运气。我花了很多时间查看 ***,并认为这里有人可以提供帮助。
我需要能够跨多个范围确定开始日期 x 天数。例如:
Range || Ending Date of Range (date) || Number of Days in Range (int)
1 || 2/20/2013 || 44
2 || 9/5/2014 || 75
3 || 3/25/2016 || 20
我有 3 个范围持续不同的时间,每个范围都有结束日期。日期范围从不重叠。我需要计算一个特定的数字,比如 100 天,回到范围内。在上面的例子中。答案是 2/15/13。
20 + 75 = 95 天。 100 - 95 = 5 天。因此,从 2013 年 2 月 20 日开始的 5 天是 2013 年 2 月 15 日。
有谁知道我可以如何在 SQL 查询中完成这项工作?
我相信最好的方法是将范围相加,直到总和通过所需的数字 (100),然后取之前的差 (95) 并从 (100) 中减去它,这样我就可以得到 (5)简单的日期数学。我可以使用任何编程语言轻松做到这一点,但使用 SQL 时我很吃力。
我真正需要帮助的是提出 (5) 和正确的结束日期 (2/20/2013)。我可以从那里处理日期数学。
我将不胜感激任何有关如何完成此任务的指导。提前致谢。
【问题讨论】:
您使用的是哪个 RDBMS?请标记它,因为每个都可以有自己的功能(尤其是在日期方面)。 我无法理解这一点。为什么你遗漏了范围1?我认为您需要更好地解释这里的逻辑。为什么要从范围 1 中减去 5?没有意义。 Tom - DB2... Ricardo - 重点是倒数到 100。日期范围 3 + 日期范围 2 = 95 剩下的是 5 我可以倒数 5 天那个范围。对不起,如果我不清楚。 【参考方案1】:我在 Sybase 中试过这个:
SELECT
max(CASE WHEN total_days >= chosen_days THEN end_date END)
-
min(CASE WHEN total_days < chosen_days THEN chosen_days - total_days ELSE chosen_days END)
FROM
(
SELECT a.end_date, sum(b.days_in_range) AS total_days, 100 AS chosen_days
FROM test AS a JOIN test AS b ON a.end_date <= b.end_date
GROUP BY a.end_date
) AS x
【讨论】:
我很感激你的建议,我会看看我能做些什么。再次感谢。以上是关于跨多个日期范围计算开始日期的主要内容,如果未能解决你的问题,请参考以下文章
vue:element.ui中中日期时间范围选择控件怎么设置选择的范围,不能跨月选择