[英]Creating a View from Different Another View and Calculate Some Field
我有两个表( 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]
其他表的[Six_months_Log].[Value]
:
表的每一行:
[Daily_log].[Value]
x[Six_months_Log].[Value]
在Daily_log
我们有:
[Code_Type]:
602为每日代码
[Half]:
1
是今年的前六个月, 2
是今年的后六个月
[Location]:
每个地方都有一个uniq码
=============================| 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是六个月的代码
[Half]:
1
是今年的前六个月, 2
是今年的后六个月
[Location]:
每个地方都有一个uniq码
========================| 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 |
| ... |... |... | ... | ... | ... | ... |
+-------+-----------+------------+---------+-------+--------+------+
你在寻找这样的东西吗?
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)
上的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.