我有一个观点,我试图合并两组以不同方式存储的时间序列数据。设置为D每个时间点都有一个与一起存储的值。 Set R的值仅与生效日期,一起存储,并且它们保持有效直至被取代。下面是一个例子表结构:我可以在SQL Server中消除这个子查询吗?
Table D
---------+------------------+--------
D_series | D_time | D_value
---------+------------------+--------
1 | 2012-01-01 00:00 | 4.52
1 | 2012-01-01 01:00 | 2.41
1 | 2012-01-01 02:00 | 5.98
1 | 2012-01-01 03:00 | 3.51
2 | 2012-01-01 00:00 | 4.54
2 | 2012-01-01 01:00 | 6.41
2 | 2012-01-01 02:00 | 5.28
2 | 2012-01-01 03:00 | 3.11
3 | 2012-01-01 00:00 | 4.22
3 | 2012-01-01 01:00 | 9.41
3 | 2012-01-01 02:00 | 3.98
3 | 2012-01-01 03:00 | 3.53
Table L
---------+---------
D_series | R_series
---------+---------
1 | 1
2 | 1
3 | 2
Table RV
---------+----------+--------
R_series | R_header | R_value
---------+----------+--------
1 | 1 | 5.23
1 | 2 | 2.98
2 | 1 | 1.35
Table RH
---------+-----------------
R_header | R_start
---------+-----------------
1 | 2012-01-01 00:00
2 | 2012-01-01 01:49
3 | 2012-01-01 02:10
我想,以期D_time
返回所有点沿着他们相应的D_value
和任何R_value
被电流:
---------+------------------+---------+--------
D_series | D_time | D_value | R_value
---------+------------------+---------+--------
1 | 2012-01-01 00:00 | 4.52 | 5.23
1 | 2012-01-01 01:00 | 2.41 | 5.23
1 | 2012-01-01 02:00 | 5.98 | 2.98
1 | 2012-01-01 03:00 | 3.51 | 2.98
2 | 2012-01-01 00:00 | 4.54 | 5.23
2 | 2012-01-01 01:00 | 6.41 | 5.23
2 | 2012-01-01 02:00 | 5.28 | 2.98
2 | 2012-01-01 03:00 | 3.11 | 2.98
3 | 2012-01-01 00:00 | 4.22 | 1.35
3 | 2012-01-01 01:00 | 9.41 | 1.35
3 | 2012-01-01 02:00 | 3.98 | 1.35
3 | 2012-01-01 03:00 | 3.53 | 1.35
我知道我可以,如果我做这样做子查询,并加入到它:
select D.D_series, D_time, D_value, RV1.R_value
from D
join L on L.D_series = D.D_series
join RV RV1 on RV1.R_series = L.R_series
join RH RH1 on RH1.R_header = RV1.R_header and RH1.R_start <= D.D_time
left join (
select R_series, R_value, R_start
from RV RV2
join RH RH2 on RH2.R_header = RV2.R_header
) RZ on RZ.R_series = RV1.R_series and RZ.R_start > RH1.R_start
where RZ.R_start is null or RZ.R_start > D_time
但据我了解,这个子查询将获取每记录在RV
和RH
首先,即使该视图只涉及几个R_series
。有没有什么办法可以消除这个子查询并将其变为标准连接?
你可以显示你想要的结果,所以我们不必逆向工程你的单词问题? – 2013-03-08 17:57:28
sqlfiddle会很好。另外,是什么让你觉得每一条记录都会被提取?你看过查询计划吗? – fguchelaar 2013-03-08 18:01:07
@AaronBertrand完成 – Chel 2013-03-08 18:07:44