【发布时间】:2017-08-31 15:25:36
【问题描述】:
这是我在这个论坛上的第一篇文章,如果我不清楚或我的问题格式不正确,请道歉。
我有下表,TABLE_MONTHS:
| Date | Year_Part | Month_part |
31-01-2016 2016 1
29-02-2016 2016 2
31-03-2016 2016 3
30-04-2016 2016 4
... ... ...
这张表只是简单地贯穿了 2016 年全年,其中第一列是每个月的最后一天。
我还有另一个表,TABLE_SAVINGS:
| Date | Year_Part | Month_part | Cumulative_Saved |
03-01-2016 2016 1 50
07-03-2016 2016 3 150
25-03-2016 2016 3 275
14-07-2016 2016 7 400
... ... ...
此表显示了我将一些钱存入我的储蓄银行帐户的每个日期以及存入的金额。
我所追求的是连接这两个表,结果表如下所示:
| Date | Year_Part | Month_part | Cumulative_Saved |
31-01-2016 2016 1 50
29-02-2016 2016 2 50
31-03-2016 2016 3 275
30-04-2016 2016 4 275
31-05-2016 2016 5 275
30-06-2016 2016 6 275
31-07-2016 2016 7 400
... ... ...
本质上是一张表格,它不仅提供我将钱存入储蓄账户的确切日期,还让我按月记录我的储蓄账户中有多少资金。
我的问题是我正在努力弄清楚这两个表的连接逻辑以获得我想要的结果。
经过多次尝试让这个工作,我设法想出的“最好的”是,
SELECT
A.*,
MAX(B.Cumulative_Saved) OVER
(PARTITION BY B.Month_part ORDER BY B.Month_part ASC)
FROM
TABLE_MONTHS A
LEFT JOIN
TABLE_SAVINGS B
ON A.[Date] <= B.[Date]
但这也会将 TABLE_MONTHS 中较早的日期连接到 TABLE_SAVINGS 中的较晚日期,因此我最终会为 TABLE_MONTHS 中的每个日期添加多个日期多行。
我也意识到,只有当 Cumulative_Saved 字段只增加(在我的数据中没有增加)时,这才能正常工作,否则我不一定会选择数据最接近月底日期的行从我的第一张桌子。
我真的在为这些问题苦苦挣扎,希望得到答案,我真的看不出有什么办法让它发挥作用。
如果有任何不清楚的地方,请告诉我,我会尽力澄清我的意思。
我可以访问 Netezza 和 SSMS,因此最好选择其中任何一个。
提前感谢您的任何回答。
【问题讨论】:
标签: sql sql-server join netezza partition