2017-11-03 5 views
0

私の顧客の1人が釣り免許を販売しています。彼らは、それぞれの漁業ゾーンごとに毎週のクォータを持っています。このクォータは、開いている平日の間で均等に分割する必要があります(閉じていることもあります)。休業日は1から7までの日数を含むコンマ区切りのリストで表されます。例えば。休業日のない特定の週の週割当は14ライセンスです。これは、週の曜日ごとに2つのライセンスが利用可能であることを意味します。平日に週単位でクォータを配付

私は、毎週の割り当てを含むテーブルに基づいて任意の日付の割り当てを与えるselectが必要です。私は希望の結果を与えるこのクエリを書いたが、私はそれがCASE文を使用せずにはるかに短い方程式として書くことができると確信しています。しかし、私の数学のスキルは、そのような解答には十分ではありません。p

1日目は、単純に7で割ります。 2日目は、まず1日目のクォータを減算し、残りの6日間は週です。 ...など。

1日が終了すると、クエリのすべての除数を1ずつ減らす必要があります。

Kvote =クォータ

  (CASE WEEKDAY(calendar.dy)+1 
       WHEN 1 THEN CEIL(Kvote/7) 
       WHEN 2 THEN CEIL((Kvote-CEIL(Kvote/7))/6) 
       WHEN 3 THEN CEIL((Kvote-CEIL(Kvote/7)-CEIL((Kvote-CEIL(Kvote/7))/6))/5) 
       WHEN 4 THEN CEIL((Kvote-CEIL(Kvote/7)-CEIL((Kvote-CEIL(Kvote/7))/6)-CEIL((Kvote-CEIL(Kvote/7)-CEIL((Kvote-CEIL(Kvote/7))/6))/5))/4) 
       WHEN 5 ... 
       WHEN 6 ... 
       WHEN 7 ... 
      END) AS DayQuota 

SQLFiddle here

+0

の比較を参照してください。私が見ていけませんこれはどのように多くのライセンスwを考慮する月曜日売れた?日曜日が終わったらなぜ7で割りますか? –

+0

あなたは正しいです。私は昨日質問を書き始め、今日それを終えました。その間、前提条件を変えた仕事をしました。私は今質問を更新しました。ごめんなさい。 – aanders77

+0

どの日が開いており、どの日が閉じられているかについての情報はどこですか?存在する場合は、クエリで使用していません。 – trincot

答えて

1

この式は、あなたの質問でCASE WHEN式と同じ結果得られます。

FLOOR(Kvote/7) + (WEEKDAY(calendar.dy) < Kvote % 7) 

updated fiddle

+0

私はそれが大好きです。どうもありがとうございました! :-) – aanders77

関連する問題