基准期前1年和基准期后1年的糖果使用持续时间

li9yvcax  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(385)

假设一个学生每天只吃一块糖果。我需要找出一个学生在开学前(如“开学前一年的糖果消费总量”一栏所示)和开学后一年内(如“开学后一年的糖果消费总量”一栏所示)用红色字体显示的糖果消费量。我的数据如黑色字体的表格所示。我计算了突出显示的列。我已经提供了计算“开学前一年糖果消费总量”和计算“开学后一年糖果消费总量”的基本原理。

棘手的部分是如何排除“开学日期”之前和一年展望期结束后发生的计数。
@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,但没用。我把最不重要的东西翻到了最重要的括号里,但没有用。
如果有人能告诉我如何修改上述代码,以计算1年后期间,这将是可怕的!

ut6juiuv

ut6juiuv1#

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

相关问题