【发布时间】:2022-01-28 04:45:31
【问题描述】:
对于不同的投资组合和策略,我拥有数年的每日利润。对于每个日期、投资组合和策略,我希望查看每日利润(未计算,因为这已经可用),以及 MTD、QTD、YTD 和 LTD 值。我已经用一些嵌套的 while 循环完成了这一点,但需要很长时间,而且我相当有信心这可以通过一些连接来完成。如果有人能引导我完成它,将不胜感激。下面是练习的简化版本。前 4 列已经可用,正确的是我想要完成的:
| Date | GROUP_1 | GROUP_2 | Daily Profits | MTD | QTD | YTD | LTD |
|---|---|---|---|---|---|---|---|
| 2021-01-15 | A | X | 1 | 1 | 1 | 1 | 1 |
| 2021-01-19 | A | X | 5 | 6 | 6 | 6 | 6 |
| 2021-01-20 | A | X | 2 | 8 | 8 | 8 | 8 |
| 2021-01-24 | A | X | 5 | 13 | 13 | 13 | 13 |
| 2021-02-19 | A | X | 5 | 5 | 18 | 18 | 18 |
| 2021-02-23 | A | Y | 4 | 4 | 4 | 4 | 4 |
| 2021-03-21 | A | X | 1 | 1 | 19 | 19 | 19 |
| 2021-03-25 | A | Y | 5 | 5 | 9 | 9 | 9 |
| 2021-04-20 | A | X | 5 | 5 | 5 | 24 | 24 |
| 2021-04-24 | A | Y | 2 | 2 | 2 | 11 | 11 |
| 2021-05-20 | A | X | 3 | 3 | 8 | 27 | 27 |
| 2021-05-24 | A | Y | 4 | 4 | 6 | 15 | 15 |
| 2021-01-15 | B | Y | 5 | 5 | 5 | 5 | 5 |
| 2021-01-19 | B | Y | 3 | 8 | 8 | 8 | 8 |
| 2021-01-20 | B | Y | 1 | 9 | 9 | 9 | 9 |
| 2021-01-24 | B | Y | 2 | 11 | 11 | 11 | 11 |
| 2021-02-19 | B | Y | 4 | 4 | 15 | 15 | 15 |
| 2021-02-23 | B | Y | 5 | 9 | 20 | 20 | 20 |
| 2021-03-21 | B | Y | 1 | 1 | 21 | 21 | 21 |
| 2021-03-25 | B | Y | 1 | 2 | 22 | 22 | 22 |
| 2021-04-20 | B | Y | 4 | 4 | 4 | 26 | 26 |
| 2021-04-24 | B | Y | 5 | 9 | 9 | 31 | 31 |
| 2021-05-20 | B | Y | 1 | 1 | 10 | 32 | 32 |
| 2021-05-24 | B | Y | 2 | 3 | 12 | 34 | 34 |
【问题讨论】:
-
sum(daily_profits) over(partition by group_1, group_2, year(date), datepart(quarter, date) order by date) as QTD -
谢谢,试试看!
-
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
-
@lptr 最好添加
ROWS UNBOUNDED PRECEDING否则如果有重复的日期可能会得到不正确的结果。它也更快 -
@Charlieface,我不熟悉。你介意展示一下它是如何使用的吗?
标签: sql sql-server tsql sql-server-2017