前 1 年和 1 年 post 参考期糖果使用持续时间

duration of candy use during 1 year pre and 1 year post reference period

假设一个学生每天只吃一颗糖。我需要找出一个学生在开学前(如"Total_candies_consumed_one_year_before_start_of_school"列所示)和开学后1年内(如"Total_candies_consumed_one_year_after_start_of_school"列所示)消耗了多少颗红色的糖果字体。我的数据是黑色字体的table。我计算了突出显示的列。我已经提供了如何计算 "Total_candies_consumed_one_year_before_start_of_school" 的基本原理和计算 "Total_candies_consumed_one_year_after_start_of_school".

的基本原理

棘手的部分是如何排除发生在 "school start date" 之前和一年展望期结束之后的计数。

@GMB 解决了前期如何计算

select
    t.*,
    number_of_candies *
        greatest(
            least(school_start_date, consumed_date) 
            - greatest(purchase_date, add_months(school_start_date, -12)), 
            0
        ) / (consumed_date - purchase_date) candies_consumed_during_loopback
from mytable t]. 

有没有办法在 1 年 post 期间修改以上代码。我试过用 12 替换“-12”,但没有用。我已经翻转了最大括号内的最小-最大-没有用。

如果有人能告诉我如何修改上面的代码来计算 1 年 post 期间,那就太棒了!

感谢 Jack Douglas 为整个解决方案提供了更简洁的方法:

select mytable.*
     , greatest(0,
         least(consumed_date,school_start_date)-
         greatest(purchase_date,school_start_date-365)) consumed_in_prev_year
     , greatest(0,
         least(consumed_date,school_start_date+365)-
         greatest(purchase_date,school_start_date)) consumed_in_school_year
from mytable;