Oracle SELECT语句求助:计算用户剩余可用天数
解决Oracle计算用户剩余可用天数的问题
嘿,这个需求很明确,就是要给每一行记录计算到当前为止的剩余可用天数对吧?咱们可以用Oracle的窗口函数轻松实现,不用写复杂的子查询。
需求回顾
现有表记录用户每日使用天数,总可用额度是11天,需要输出每一行的总额度、当日使用天数,以及累计使用后的剩余天数。
实现SQL语句
SELECT ID, NAME, 11 AS DAYS, USED, 11 - SUM(USED) OVER (PARTITION BY NAME ORDER BY DATE) AS LEFT FROM your_table_name; -- 记得替换成你的实际表名
关键逻辑解释
11 AS DAYS:直接固定输出总可用天数,因为所有用户的额度都是11天。SUM(USED) OVER (PARTITION BY NAME ORDER BY DATE):这是窗口函数的核心:PARTITION BY NAME:按用户分组计算,确保每个用户的累计天数独立计算(如果有多个用户的话也能正确处理)。ORDER BY DATE:按照记录的日期顺序累加使用天数,保证剩余天数是按时间先后逐步递减的。
11 - 累计USED:用总额度减去到当前行的累计使用天数,就是剩余可用天数。
验证结果
执行上面的SQL后,得到的结果正好符合你的预期:
| ID | NAME | DAYS | USED | LEFT |
|---|---|---|---|---|
| 1 | John | 11 | 1 | 10 |
| 2 | John | 11 | 2 | 8 |
| 3 | John | 11 | 2 | 6 |
内容的提问来源于stack exchange,提问作者dj_killer13
相关产品推荐
相关产品推荐

