実際、私は T-SQL を使用してこの問題に直面しましたが、これは論理的および数学的な問題であるため、ここで運を試すことにしました。
私が持っているのは、次の形式のデータです。
Date Score
2012-11-01 12:11:50 12
2012-11-02 15:20:20 42
...
2012-11-15 20:32:21 21
したがって、正確な日付と各レコードのスコアがあります。次に、ユーザーは数字 (1、2、3、...) を入力します。これは、すべての記録をダイビングし、それらのスコアを合計するのに何回の等しい期間を示すかを示します。
だから、私が今していたことは、(ユーザーが3つのピリオドを望んでいるとしましょう):
- 最初と最後のレコードの日付を取得し、それらの間の日数差を計算します
- 結果 (30 日としましょう) を期間数で割って、各期間の日数を取得します。
- 最初の日付 + (期間の日数 * 期間のシーケンス番号) のように、各期間の期間の最初の日付を計算します。
- どの期間が日付であるかを確認し、そこでスコアを合計します
最初はうまくいきましたが、多くの問題に遭遇しました。ここで、期間の測定として日を使用することが非常に重要であると言わなければなりませんが、日を使用して解決策を作成できない場合は、時間または分を使用して最小限に抑えることができますエラー。
そして、ここに問題があります:
- 1 つのレコードと複数の期間がある場合、ステップ 2で (たとえば、ユーザーが 3 つの期間を希望している) 1/3=0 (日数と 1/3=~0.333 で作業しているため) があるため、私のソリューションは機能しません。 days=0 (T-SQL および BIGINT 変数のコンテキスト内) したがって、手順 3で各期間の最初の日付を計算すると、3 つの同じ最初の日付が得られます。
- 間隔が短い場合 (たとえば、最初の日付が 2012-12-01 で、最後の日付が 2012-12-03 で、その差は 3 日です)、望ましい期間は、T- のように同じ問題に再び遭遇します。たとえば、SQL 5/6 は再び 0 です。
- 生理が 10 回あっても 11 日なら、生理の 1 つが 1 日長くなります。
したがって、タスクはレコードを等しい期間に分割し、各期間のスコアを合計することです。私の解決策が(日数を使用して)どれほど悪いかはわかりますが、私はオープンであり、すべてのアイデアと提案を歓迎します.