Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
在MySQL中在工作日分发每周配额_Mysql_Math_Equation - Fatal编程技术网

在MySQL中在工作日分发每周配额

在MySQL中在工作日分发每周配额,mysql,math,equation,Mysql,Math,Equation,我的一个客户在卖捕鱼许可证。他们每个捕鱼区每周都有配额。该配额必须在开放的工作日和可能关闭的工作日之间平均分配。已结束的天数将由逗号分隔的列表表示,其中包含1-7之间的天数。例如,没有休息日的特定一周的每周配额为14个许可证。这意味着一周中的每一天都有2个许可证可用 我需要一个select,它根据包含每周配额的表给出任何给定日期的配额。我已经编写了这个查询,它给出了所需的结果,但是我确信它可以作为一个更短的等式来编写,而无需使用CASE语句。然而,我的数学技能不足以解决这个问题:p 对于第一天,

我的一个客户在卖捕鱼许可证。他们每个捕鱼区每周都有配额。该配额必须在开放的工作日和可能关闭的工作日之间平均分配。已结束的天数将由逗号分隔的列表表示,其中包含1-7之间的天数。例如,没有休息日的特定一周的每周配额为14个许可证。这意味着一周中的每一天都有2个许可证可用

我需要一个select,它根据包含每周配额的表给出任何给定日期的配额。我已经编写了这个查询,它给出了所需的结果,但是我确信它可以作为一个更短的等式来编写,而无需使用CASE语句。然而,我的数学技能不足以解决这个问题:p

对于第一天,它只是将配额除以7。 对于第2天,它首先减去第1天的配额,然后除以一周剩余6天的配额。 ... 等等

如果一天结束,查询中的每个除数必须减少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

此表达式给出的结果与问题中表达式的情况相同:

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

参见

我不知道这是怎么考虑的,星期一有多少许可证出售?如果周日很接近,为什么要除以7?你是对的。我昨天开始写问题,今天就完成了。与此同时,我做了一些改变先决条件的工作。我现在更新了这个问题。对不起,哪一天开放,哪一天关闭的信息在哪里?如果它存在,你就不会在你的查询中使用它。关闭日期将由1-7中以逗号分隔的列表表示。将再次更新我的问题。我喜欢它。非常感谢-