Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 跨多个日期范围计算开始日期_Sql_Date_Date Range - Fatal编程技术网

Sql 跨多个日期范围计算开始日期

Sql 跨多个日期范围计算开始日期,sql,date,date-range,Sql,Date,Date Range,我有一个SQL问题,我已经有一段时间没能解决了。我到处都找不到运气。我花了很多时间查看StackOverflow,并认为这里可能有人能提供帮助 我需要能够确定多个范围内的开始日期x天数。例如: Range || Ending Date of Range (date) || Number of Days in Range (int) 1 || 2/20/2013 || 44 2 || 9/5/2014

我有一个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日。我可以从那里开始计算日期


如果您能为我提供指导,指导我如何着手完成这项工作,我将不胜感激。提前感谢。

我在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

您正在使用哪些RDBMS?请给它贴上标签,因为每个都有自己的功能,尤其是在日期方面。我搞不懂这一点。你为什么漏掉了射程1?我认为你需要更好地解释这里的逻辑。为什么从范围1中减去5?毫无意义。汤姆-DB2。。。里卡多——关键是要倒数到100。日期范围3+日期范围2=95剩余的是5天,然后我可以在该范围内倒数5天。对不起,如果我不清楚。我很感激你的建议,我会看看,看看我能做些什么。再次感谢。