繁体   English   中英

从不同的另一个视图创建一个视图并计算一些字段

[英]Creating a View from Different Another View and Calculate Some Field

我有两个表( Daily_logSix_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM