sql - 参考期前 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”,没有用。我在最大括号内翻转了最小-最大-不起作用。
如果有人能告诉我如何修改上面的代码来计算一年后的时间,那就太棒了!
解决方案
感谢 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;
推荐阅读
- go - 打开没有类型断言的接口类型
- php - Laravel - 更新模型时更新另一个属性
- scala - scala中的特别函数递归地连接两个列表:不使用“concat”
- python - Flask:如何将上传的文件作为输入传递给方法?AttributeError: '_io.BytesIO' 对象没有属性 'lower'
- reactjs - s.indexOf 不是 Function.n.fromString 的函数
- azure-active-directory - 图形 API 无法访问“https://graph.microsoft.com/v1.0/me/messages”端点
- html - 试图弄清楚如何使网站滚动
- python - 调用一个函数来打印一些东西
- visual-studio-code - Lua 与 VS 代码
- python - 在数据框中搜索字符串并将找到的数字增加 1