如何从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