【发布时间】:2021-03-10 15:19:33
【问题描述】:
我在处理 SQL 请求时遇到问题。
我有两张表,一张代表日期向量,另一张代表不同证券价格的时间序列:
日期:
| DateId | Date |
|---|---|
| 1 | 2021-01-01 |
| 2 | 2021-01-02 |
| 3 | 2021-01-03 |
时间序列:
| SecurityId | DateId | Value |
|---|---|---|
| 1 | 1 | 0.25 |
| 1 | 3 | 0.32 |
| 2 | 1 | 0.41 |
| 2 | 2 | 0.67 |
时间序列可能存在间隙,例如在上表中,SecurityId=1 在 DateId=2 处没有任何行,而 SecurityId=2 在 DateId=3 处没有任何行。
我需要构建一个请求,用时间序列中的最后一个值填补空白。 导致所有证券和所有日期的值如下:
| SecurityId | DateId | Value |
|---|---|---|
| 1 | 1 | 0.25 |
| 1 | 2 | 0.25 |
| 1 | 3 | 0.32 |
| 2 | 1 | 0.41 |
| 2 | 2 | 0.67 |
| 2 | 3 | 0.67 |
我尝试使用正确的连接开始匹配所有日期
SELECT * from [TimeSerie] px RIGHT JOIN Dates dt on dt.DateId = px.Dateid
不幸的是,这不起作用,因为总有一个安全性与 DateId 上的相等性匹配,所以我没有得到没有值的 TimeSeries 行。
我正在研究 SQL Server 标准 2019,我的目标是基于单个查询的解决方案(避免使用临时表或游标的过程)。
【问题讨论】:
标签: sql sql-server join gaps-in-data