sql - 计算前期间的总数,不包括回顾之前和参考年之后的计数
问题描述
假设一个学生每天只吃 1 颗糖果。我需要找出一个学生在开学前消耗了多少糖果(如红色字体“Total_candies_consumed_one_year_before_start_of_school”一栏所示)。我的数据如表中黑色字体所示。我计算了突出显示的列。我提供了有关如何计算“Total_candies_consumed_one_year_before_start_of_school”的基本原理。
我被困在如何排除“1_year_lookback_period”之前和“开学日期”之后发生的计数。
任何帮助是极大的赞赏。
解决方案
我认为您正在寻找某种线性回归。
school_start_date
这个想法是通过计算此期间与糖果定义的日期范围之间的重叠天数purchase_date
来评估在之前的一年中消耗了多少consumed_date
糖果。根据重叠率,您可以预测回溯期间的消耗。
这应该做你想要的:
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
身份证 | 购买日期 | NUMBER_OF_CANDIES | 消费日期 | 学校_START_DATE | RES -: | :------------ | ----------------: | :------------ | :---------------- | --: 1 | 2009 年 12 月 30 日 | 15 | 10 年 1 月 14 日 | 2011 年 1 月 1 日 | 13 1 | 2010 年 5 月 30 日 | 30 | 29-JUN-10 | 2011 年 1 月 1 日 | 30 2 | 10 年 11 月 1 日 | 90 | 2011 年 1 月 30 日 | 2011 年 1 月 1 日 | 61 2 | 2012 年 8 月 9 日 | 15 | 12 年 8 月 24 日 | 2011 年 1 月 1 日 | 0 3 | 14 年 12 月 1 日 | 900 | 17 年 5 月 19 日 | 2016 年 1 月 1 日 | 365
推荐阅读
- javascript - 为什么这个 if 语句不起作用?
- python - Django表单值在视图中没有改变
- mysql - 如何加快或改进此查询?
- java - 我无法读取 .txt 中的所有数字
- javascript - 使文本输入只接受正确的人名
- mysql - 一列具有多个索引的原因,MySQL
- java - 即使没有选择座位,也会进行座位选择
- dictionary - VBScript 参数未从字典中获取匹配值
- ios - 在控制/通知中心打开时保持 SpriteKit 场景运行
- kubernetes - 如何使用 kubectl 命令从 k8s configmap 中的 yaml 文件中获取值?