2016-03-25 93 views
0

我有一個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天是2/15/2013。

有誰知道我可能會如何去完成這個SQL查詢?我相信最好的方法是將範圍加在一起,直到總和超過想要的數量(100),然後取差值(95),並從(100)中減去它,這會給我從(5)只是簡單的日期數學。我可以用任何編程語言輕鬆做到這一點,但我正在努力掙扎。

真的,我需要幫助的是提出(5)和正確的結束日期(2/20/2013)。我可以從那裏處理日期數學。

我很感激任何關於如何完成此任務的指導。提前致謝。

+0

哪個RDBMS您使用的?請給它加上標籤,因爲每個都可以有自己的功能(特別是當涉及到日期時)。 –

+0

我無法理解這一點。爲什麼你忽略了範圍1?我認爲你需要更好地解釋這裏的邏輯。爲什麼你從範圍1減去5?沒有意義。 –

+0

Tom - DB2 ... Ricardo - 點數倒數達到100.日期範圍3 +日期範圍2 = 95剩下的是5我可以在該範圍內計數5天。對不起,如果我不清楚。 – jackfish

回答

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 
+0

我很欣賞這個建議,我會看一看,看看我能做些什麼。再次感謝。 – jackfish