如何以 N 行为一组进行 GROUP BY?

How to GROUP BY in groups of N rows?

我有一个名为 PEOPLE 的 table,具有以下数据:

MYNAME    AGE     MYDATE
==========================
MARIO     20      2015/02/03
MARIA     10      2015/02/02
PEDRO     40      2015/02/01
JUAN      15      2015/01/03
PEPE      20      2015/01/02
JULIA     30      2015/01/01
JUANI     50      2014/02/03
MARTIN    10      2014/02/03
NASH      21      2014/02/03

然后我想获得按 MYDATE 降序排列的 3 人一组的平均年龄。 我的意思是,我正在寻找的结果类似于:

23,3 
21,6 
27

其中 23,3 是年龄的平均值:

MARIO   20      2015/02/03
MARIA   10      2015/02/02
PEDRO   40      2015/02/01

21,6是以下年龄的平均值:

JUAN    15      2015/01/03
PEPE    20      2015/01/02
JULIA   30      2015/01/01

27是以下年龄的平均值:

JUANI   50      2014/02/03
MARTIN  10      2014/02/03
NASH    21      2014/02/03

我该如何处理?我知道如何使用 GROUP BY 但只能针对 table.

的特定字段进行分组

SQL 表本质上是无序的,因此我假设您希望按 mydate 降序排列。您可以使用变量枚举行,使用算术定义组,然后取平均值:

select avg(age)
from (select t.*, (@rn := @rn + 1) as seqnum
      from table t cross join
           (select @rn := 0) vars
      order by mydate desc
     ) t
group by floor((seqnum - 1) / 3);

尝试 - 然后您还可以使用 Grp 来获取平均值与哪三个人相关

select MYNAME, AGE, MYDATE, RN / 3 As Grp into #x
from
(select MYNAME, AGE , MYDATE, ROW_NUMBER() over(order by MyDate) + 2 as RN
from MYdata)x

select Grp, AVG(Age) as AvgAge
From #x
Group By Grp