计算积分,有日期字段,和扣分字段
每人每年期初分80分,每季度增加5分,总分上限100分
本月期末数=下月期初数
这个循环计算的逻辑没想出来
这个需要确认两个方向
- 数据是滚动数据,不停的计算未来出现的积分变动情况:
- 直接对数据进行update,其逻辑核心是确认现在是不是季度交汇点,如果是的话,就加分,如果不是,就不加,
- 要将分值减去扣分的分数,这个时间维度不清楚,不确认需要日扣还是月扣
- 超过100分按100分算,通过case when处理。
- 数据是历史数据,需要计算目前每个人的积分情况:
- 这种情况其实不需要循环处理的,直接汇总就可以
- 注意时间跨度问题,初始80分的月份距离目前有多少个季度,然后update分值字段,加上 5 * 季度数
- 分值字段需要再减去个人记录汇总后的扣分项总和
- 最后一个case when 套起来,> 100 的直接 then 100
楼上说得真详细哈,直接把题主没说清楚的场景进行了分类讨论。
题主没有说明,这是在做一个积分功能还是在做一个实时查询的积分报表
如果是一个实时查询的积分报表,没有实时积分的话那也太不合理了,扣分扣成负数了怎么办?
如果是要做一个积分功能,那么这个东西应该要多个过程。
- 新用户积分初始化过程,即新增用户自动给80分
- 年初老用户积分初始化过程,直接更新成80分
- 扣分函数,传入用户及扣分值,校验当前分大于等于扣分,则扣分,否则返回失败
- 季度加分过程,每个季度开始的当日0点,给所有用户加5分。
如果是个报表,那么请提供你最终需要的报表格式,因为从题目上看,没有使用循环的必要