Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MS Access/SQL中的第一条记录开始计算一列中每三条记录的平均值?_Sql_Sql Server_Ms Access_Ms Access 2003 - Fatal编程技术网

如何从MS Access/SQL中的第一条记录开始计算一列中每三条记录的平均值?

如何从MS Access/SQL中的第一条记录开始计算一列中每三条记录的平均值?,sql,sql-server,ms-access,ms-access-2003,Sql,Sql Server,Ms Access,Ms Access 2003,我正在做一件事,从一列中的第一条记录开始,我陷入了平均每三条/四条/五条记录的困境。如果我有一张有数据的表格 ID_Col1 | Value_Col2 1 | 1.5 2 | 2 3 | 2.5 4 | 3 5 | 3.5 6 | 4 7 | 4.5 8 | 5 9 | 5.5 10 | 6 如果我们说每三条记录的平均值,那么所需的输出是 every_three_rec

我正在做一件事,从一列中的第一条记录开始,我陷入了平均每三条/四条/五条记录的困境。如果我有一张有数据的表格

ID_Col1 | Value_Col2
1       | 1.5
2       | 2
3       | 2.5
4       | 3
5       | 3.5
6       | 4
7       | 4.5
8       | 5
9       | 5.5
10      | 6
如果我们说每三条记录的平均值,那么所需的输出是

    every_three_records_average_Column
    none
    none
    average(1.5, 2, 2.5)
    average(2, 2.5, 3)
    average(2.5, 3, 3.5)
    average(3, 3.5, 4)
    average(3.5, 4, 4.5)
    average(4, 4.5, 5)
    average(4.5, 5, 5.5)
    average(5, 5.5, 6)
有人知道如何在SQL查询中获得这种输出吗

任何帮助都将不胜感激

谢谢, 亲爱的

输出

MyParam的结果=3

MyParam的结果=5


考虑对最后三个ID进行相关聚合子查询筛选:

SELECT myTable.ID_Col1, myTable.Value_Col2,

       (SELECT Avg(sub.Value_Col2)
        FROM myTable As sub
        WHERE sub.ID_Col1 >=  myTable.ID_Col1 - 2
        AND sub.ID_Col1 <=  myTable.ID_Col1
        AND myTable.ID_Col1 >= 3) As LastThreeAvg

FROM myTable;
但是,如果ID_Col1是一个自动编号字段,则不能保证值将保留在数字顺序计数中。因此,在派生表和聚合子查询中都需要计算的行号RowNo。在没有CTE的MS Access SQL中,查询变得有点冗长:

SELECT dT.ID_Col1, dT.Value_Col2, 

       (SELECT Avg(sub.Value_Col2)
        FROM 
             (SELECT ID_Col1, Value_Col2,
                     (SELECT Count(*) 
                      FROM myTable As sub
                      WHERE sub.ID_Col1 <= myTable.ID_Col1) As RowNo
             FROM myTable) As sub
        WHERE sub.RowNo >=  dT.RowNo - 2
        AND sub.RowNo <=  dT.RowNo
        AND sub.RowNo >= 3) As LastThreeAvg
FROM

(SELECT ID_Col1, Value_Col2,
        (SELECT Count(*) 
         FROM myTable As sub
         WHERE sub.ID_Col1 <= myTable.ID_Col1) As RowNo
FROM myTable) As dT

访问还是MYSQL?随便选一张牌@RiggsFolly MS Access我知道它是MySQL,但希望这能帮助我尝试使用SELECT t1.Val+t2.Val+t3.Val/3作为t1上Tbl t1内部连接Tbl t2的平均值。ID-1=t2.ID t2上的内部连接Tbl t3.ID-1=t3。ID@honey这个查询有什么问题?这正是我所做的和工作OK,我测试了它,修改了一点,现在它工作得很好@亲爱的,你的问题没有得到很好的回答吗?
MyTable:
ID_Col1 Value_Col2
1       1.5
2       2
3       2.5
4       3
5       3.5
6       4
7       4.5
8       5
9       5.5
10      6
11      6.5
12      7
13      7.5
14      8
15      8.5
16      9
17      9.5
Result
2
2.5
3
3.5
4
4.5
5
5.5
6
6.5
7
7.5
8
8.5
9  
Result
2.5
3
3.5
4
4.5
5
5.5
6
6.5
7
7.5
8
8.5
SELECT myTable.ID_Col1, myTable.Value_Col2,

       (SELECT Avg(sub.Value_Col2)
        FROM myTable As sub
        WHERE sub.ID_Col1 >=  myTable.ID_Col1 - 2
        AND sub.ID_Col1 <=  myTable.ID_Col1
        AND myTable.ID_Col1 >= 3) As LastThreeAvg

FROM myTable;
ID_Col1   Value_Col2  LastThreeAvg
1         1.5       
2         2     
3         2.5         2
4         3           2.5
5         3.5         3
6         4           3.5
7         4.5         4
8         5           4.5
9         5.5         5
10        6           5.5
SELECT dT.ID_Col1, dT.Value_Col2, 

       (SELECT Avg(sub.Value_Col2)
        FROM 
             (SELECT ID_Col1, Value_Col2,
                     (SELECT Count(*) 
                      FROM myTable As sub
                      WHERE sub.ID_Col1 <= myTable.ID_Col1) As RowNo
             FROM myTable) As sub
        WHERE sub.RowNo >=  dT.RowNo - 2
        AND sub.RowNo <=  dT.RowNo
        AND sub.RowNo >= 3) As LastThreeAvg
FROM

(SELECT ID_Col1, Value_Col2,
        (SELECT Count(*) 
         FROM myTable As sub
         WHERE sub.ID_Col1 <= myTable.ID_Col1) As RowNo
FROM myTable) As dT