前 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;
假设一个学生每天只吃一颗糖。我需要找出一个学生在开学前(如"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;