请求协助编写SQL查询以生成指定输出结果
请求协助编写SQL查询以生成指定输出结果
嘿,各位SQL大神,我现在遇到个需求,想请大家帮忙写个查询语句。我手里有这么一张输入表:
| Start_date | future_date | current value | finished value |
|---|---|---|---|
| 2020-01-01 | 2020-01-01 | 100 | 15 |
| 2020-01-01 | 2020-01-02 | 150 | 80 |
| 2020-01-01 | 2020-01-03 | 200 | 25 |
| 2020-01-01 | 2020-01-04 | 300 | 70 |
| 2020-01-01 | 2020-01-05 | 400 | 65 |
我的目标是生成一个中间输出,具体是要针对每个Start_date,按future_date的先后顺序,计算截至当天的累计完成量,同时算出当前值和累计完成量的差值(也就是剩余待完成的量)。最终输出需要包含原表的所有字段,再加上这两个计算出来的字段。
我自己试了下窗口函数,写了这么一段查询,大家看看有没有问题,或者有没有更优的写法:
SELECT Start_date, future_date, `current value` AS current_value, `finished value` AS finished_value, SUM(`finished value`) OVER (PARTITION BY Start_date ORDER BY future_date) AS cumulative_finished, `current value` - SUM(`finished value`) OVER (PARTITION BY Start_date ORDER BY future_date) AS remaining_value FROM your_table;
这里我用了SUM() OVER()窗口函数,按Start_date分组,再按future_date排序,这样就能逐天累计完成量了。另外因为字段名里有空格,所以用反引号把字段名括起来了(如果是MySQL的话),要是其他数据库比如PostgreSQL,可能需要用双引号。
如果我的理解和你实际的中间输出需求不一样,麻烦把具体的输出格式和逻辑补充说明下,我再调整查询语句~
备注:内容来源于stack exchange,提问作者Johnson
相关产品推荐
相关产品推荐

