我有两个表(Daily_log
和Six_months_Log
),第一个表(Daily_log
)包含每日数据记录,第二个表(Six_months_Log
)包含六个月期间的数据,前六个月以1
显示,后六个月以2
显示。
但是,它们都是相同的,但是对于[Six_months_Log]
表中的每个记录,我们在[Daily_log]
表中有很多记录。因此,我想为[Daily_log]
表中的每个并行记录计算[Six_months_Log]
表中每六个月的记录平均值,最后
[Daily_log].[Value]
的平均值乘以其他表的[Six_months_Log].[Value]
:
表的每一行:
[Daily_log].[Value]
x[Six_months_Log].[Value]
在Daily_log
中,我们有:
[Code_Type]:
602 是每日代码
[Half]:
1
是一年的前六个月,2
是一年的后六个月
[Location]:
每个地方都有唯一代码
=============================| Daily_log |==========================
+-------+-----------+------------+---------+-------+--------+------+
| ID | Location | Date |Code_Type| Year | Value | Half |
+-------+-----------+------------+---------+-------+--------+------+
| 1200 | 20200 |2015/01/01 | 602 | 2015 | 550 | 1 |
| 1202 | 20200 |2015/01/02 | 602 | 2015 | 680 | 1 |
| 1203 | 20200 |2015/01/03 | 602 | 2015 | 780 | 1 |
| ... |... |... | ... | ... | ... | ... |
| 1420 | 20200 |2015/06/01 | 602 | 2015 | 260 | 2 |
| 1421 | 20200 |2015/06/02 | 602 | 2015 | 790 | 2 |
| 1422 | 20200 |2015/06/03 | 602 | 2015 | 640 | 2 |
| ... |... |... | ... | ... | ... | ... |
| 1420 | 15300 |2017/11/01 | 602 | 2017 | 470 | 2 |
| 1421 | 15300 |2017/11/02 | 602 | 2017 | 990 | 2 |
| 1422 | 15300 |2017/11/03 | 602 | 2017 | 140 | 2 |
| ... |... |... | ... | ... | ... | ... |
+-------+-----------+------------+---------+-------+--------+------+
在Six_months_Log
中,我们有:
[Code_Type]:
402 是6个月的代码
[Half]:
1
是一年的前六个月,2
是一年的后六个月
[Location]:
每个地方都有唯一代码
========================| Six_months_Log |==========================
+-------+-----------+------------+---------+-------+--------+------+
| ID | Location | Date |Code_Type| Year | Value | Half |
+-------+-----------+------------+---------+-------+--------+------+
| 201 | 20200 |2015/01/01 | 402 | 2015 | 50 | 1 |
| 202 | 20200 |2015/07/01 | 402 | 2015 | 80 | 2 |
| ... |... |... | ... | ... | ... | ... |
| 320 | 20201 |2015/01/01 | 402 | 2015 | 60 | 1 |
| 321 | 20201 |2015/07/01 | 402 | 2015 | 90 | 2 |
| ... |... |... | ... | ... | ... | ... |
| 820 | 15300 |2017/01/01 | 402 | 2017 | 70 | 1 |
| 821 | 15300 |2017/07/01 | 402 | 2017 | 20 | 2 |
| ... |... |... | ... | ... | ... | ... |
+-------+-----------+------------+---------+-------+--------+------+
答案 0 :(得分:2)
您是否正在寻找类似的东西?
select sml.*, dl.avg_value, dl.avg_value * sml.value
from six_months_log sml outer apply
(select avg(dl.value) as avg_value
from daily_log dl
where dl.location = sml.location and
dl.date <= sml.date and
dl.date > dateadd(month, -6, sml.date)
) dl;
为了提高性能,您希望在daily_log(location, date, value)
上建立索引。