我有一个SQL问题,我现在暂时无法解决。我没有运气就到处寻找。我花了很多时间浏览StackOverflow,并认为这里有人可能会提供帮助。
我需要能够确定多个范围内的开始日期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)和正确的结束日期(2013年2月20日)。我可以从那里处理日期数学。
我很感激有关如何实现这一目标的任何指导。提前谢谢。
答案 0 :(得分:0)
我在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