首页 > 解决方案 > 参考期前 1 年和参考期后 1 年使用糖果的持续时间

问题描述

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

数据和理由

棘手的部分是如何排除在“开学日期”之前和一年展望期结束之后发生的计数。

@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 年后修改上述代码。我试过用 12 替换“-12”,没有用。我在最大括号内翻转了最小-最大-不起作用。

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

标签: sqlnetezza

解决方案


感谢 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;

推荐阅读