2016-03-25 17 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日後は、2013年2月15日です。

SQLクエリでこれを達成する方法を知っている人はいますか?

私は、合計が希望の数値(100)を超えてから差を取って(95)それを(100)から差し引くと、そこから私に(5)単純な日付の数学。どのプログラミング言語でもこれを簡単に行うことができますが、SQLでは苦労しています。

本当に助けが必要なのは(5)と正しい終了日(2012年2月20日)です。私はそこから数学の日付を扱うことができます。

私はこれを達成するためにどのように動くかもしれないかについてのご指摘をお待ちしております。前もって感謝します。

+0

を?それぞれが独自の機能を持つことができるようにタグ付けしてください(特に、日付については)。 –

+0

私はこれを理解できません。なぜ範囲1を外したのですか?私はあなたがここで論理をよりよく説明する必要があると思います。なぜ範囲1から5を引くのですか?意味がありません。 –

+0

Tom - DB2 ... Ricardo - ポイントは100に戻るようにカウントされます。日付範囲3 +日付範囲2 = 95残っているものは5です。次に、その範囲で5日間カウントダウンします。申し訳ありませんが私は明確ではない場合。 – jackfish

答えて

0

私は、Sybaseでこれを試してみました:RDBMSは、使用している

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

関連する問題