В зависимост от вашата СУБД нещо подобно ще работи:
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;
Това създава 5 групи или части, независимо колко реда има, както сте поискали.
Ако нямате функции за прозорци, можете да го фалшифицирате:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Направих някои предположения тук като Id
започвайки с 1 и да няма пропуски и че бихте искали последната група да е твърде малка, вместо твърде голяма, ако нещата не се разделят равномерно. Освен това предположих, че целочисленото деление ще доведе като в Ms SQL Server.