【发布时间】:2017-12-24 15:03:08
【问题描述】:
我有一张包含以下信息的表格
Table1 是一个子查询,为了简化我将只使用结果表:
| Account_No | Dept_ID | Currency| Amount | Date_2(dd/mm/yyyy)|
+------------+---------+---------+--------+-------------------+
| 1 | 1 | USD | 50 | 03/01/2017 |
| 1 | 2 | EUR | 25 | 01/01/2017 |
| 1 | 3 | USD | 51 | 01/01/2017 |
| 1 | 1 | GBP | 45 | 01/01/2017 |
| 1 | 2 | USD | 65 | 02/01/2017 |
金额是某部门指定货币的账户在该日期当天结束时的金额。更重要的是,Currency 和 Dept_ID(相同的 Account_no 但不同的货币和/或部门 ID)可能会导致同一帐户的变化,我的意思是 PK 是组合Account_no、Dept_ID 和货币。
我正在尝试将该表附加到具有某个指定范围的每天的日期表:
日期表:
| Date_1 |
+------------+
| 01/01/2017 |
| 02/01/2017 |
| 03/01/2017 |
| 04/01/2017 |
| 05/01/2017 |
...
预期结果是:
| Date_1 | Account_No | Dept_ID | Currency| Amount | Date_2(dd/mm/yyyy)|
+------------+------------+---------+---------+--------+-------------------+
| 01/01/2017 | 1 | 1 | USD | 0 | |
| 01/01/2017 | 1 | 2 | USD | 0 | |
| 01/01/2017 | 1 | 2 | EUR | 25 | 01/01/2017 |
| 01/01/2017 | 1 | 3 | USD | 51 | 01/01/2017 |
| 01/01/2017 | 1 | 1 | GBP | 45 | 01/01/2017 |
| 02/01/2017 | 1 | 2 | USD | 65 | 02/01/2017 |
| 02/01/2017 | 1 | 2 | EUR | 25 | |
| 02/01/2017 | 1 | 3 | USD | 51 | |
| 02/01/2017 | 1 | 1 | GBP | 45 | |
| 02/01/2017 | 1 | 1 | USD | 0 | |
| 03/01/2017 | 1 | 1 | USD | 50 | 03/01/2017 |
| 03/01/2017 | 1 | 1 | GBP | 45 | |
| 03/01/2017 | 1 | 3 | USD | 51 | |
| 03/01/2017 | 1 | 2 | EUR | 25 | |
| 03/01/2017 | 1 | 2 | USD | 65 | |
因此,对于 Dates 表中的每个日期,我都会从 Table1 获得信息,如果缺少信息,则应选择前几天的信息。我已经完成了左加入的查询,但不知道如何将前一天的数据填充到缺失的字段中
SELECT * FROM DATES A LEFT JOIN TABLE1 B ON A.DATE_1 = B.DATE_2;
我明白了
| Date_1 | Account_No | Dept_ID | Currency| Amount | Date_2(dd/mm/yyyy)|
+------------+------------+---------+---------+--------+-------------------+
| 01/01/2017 | 1 | 2 | EUR | 25 | 01/01/2017 |
| 01/01/2017 | 1 | 3 | USD | 51 | 01/01/2017 |
| 01/01/2017 | 1 | 1 | GBP | 45 | 01/01/2017 |
| 02/01/2017 | 1 | 2 | USD | 65 | 02/01/2017 |
| 03/01/2017 | 1 | 1 | USD | 50 | 03/01/2017 |
| 04/01/2017 | | | | | |
...
感谢您提供有关如何进行的建议
【问题讨论】: