在MySQL中在工作日分发每周配额
我的一个客户在卖捕鱼许可证。他们每个捕鱼区每周都有配额。该配额必须在开放的工作日和可能关闭的工作日之间平均分配。已结束的天数将由逗号分隔的列表表示,其中包含1-7之间的天数。例如,没有休息日的特定一周的每周配额为14个许可证。这意味着一周中的每一天都有2个许可证可用 我需要一个select,它根据包含每周配额的表给出任何给定日期的配额。我已经编写了这个查询,它给出了所需的结果,但是我确信它可以作为一个更短的等式来编写,而无需使用CASE语句。然而,我的数学技能不足以解决这个问题:p 对于第一天,它只是将配额除以7。 对于第2天,它首先减去第1天的配额,然后除以一周剩余6天的配额。 ... 等等 如果一天结束,查询中的每个除数必须减少1…以此类推 Kvote=配额在MySQL中在工作日分发每周配额,mysql,math,equation,Mysql,Math,Equation,我的一个客户在卖捕鱼许可证。他们每个捕鱼区每周都有配额。该配额必须在开放的工作日和可能关闭的工作日之间平均分配。已结束的天数将由逗号分隔的列表表示,其中包含1-7之间的天数。例如,没有休息日的特定一周的每周配额为14个许可证。这意味着一周中的每一天都有2个许可证可用 我需要一个select,它根据包含每周配额的表给出任何给定日期的配额。我已经编写了这个查询,它给出了所需的结果,但是我确信它可以作为一个更短的等式来编写,而无需使用CASE语句。然而,我的数学技能不足以解决这个问题:p 对于第一天,
(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中以逗号分隔的列表表示。将再次更新我的问题。我喜欢它。非常感谢-