Dependiendo de su DBMS, algo como esto funcionará:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
(
SELECT
Chunk = NTILE(5) OVER (ORDER BY Id),
*
FROM
YourTable
) AS T
GROUP BY
Chunk
ORDER BY
ChunkStart;
Esto crea 5 grupos o fragmentos sin importar cuántas filas haya, como solicitó.
Si no tiene funciones de ventana, puede falsificarlo:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Hice algunas suposiciones aquí, como Id
comenzando con 1 y sin espacios, y que desearía que el último grupo fuera demasiado pequeño en lugar de demasiado grande si las cosas no se dividieran de manera uniforme. También supuse que la división de enteros daría como resultado Ms SQL Server.