我的一位客户正在出售捕鱼许可证。他们每个渔区都有每周配额。该配额必须在开放的工作日(有些可能已关闭)之间平均分配。封闭日期将以逗号分隔的列表表示,其中包含1-7的日期编号。例如。没有关闭日期的特定周的每周配额是14个许可证。这意味着一周中每天都有2个许可证。
我需要一个select,它根据包含每周配额的表格为任何给定日期提供配额。我写了这个查询,给出了所需的结果,但我确信它可以写成一个更短的方程而不使用CASE语句。然而,我的数学技能还不足以解决这个问题:p
对于第1天,它只是将配额除以7。 对于第2天,它首先减去第1天的配额,然后将剩余的6天分成剩余的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
答案 0 :(得分:1)
此表达式与您问题中的CASE WHEN
表达式的结果相同:
FLOOR(Kvote/7) + (WEEKDAY(calendar.dy) < Kvote % 7)
中的比较