Afhankelijk van uw DBMS, zal zoiets als dit werken:
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;
Dit creëert 5 groepen of chunks, ongeacht hoeveel rijen er zijn, zoals je hebt gevraagd.
Als je geen vensterfuncties hebt, kun je het vervalsen:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Ik heb hier enkele aannames gedaan, zoals Id
beginnend met 1 en er zijn geen gaten, en dat je de laatste groep te klein zou willen in plaats van te groot als de dingen niet gelijk verdeeld zouden zijn. Ik nam ook aan dat deling op gehele getallen zou resulteren zoals in Ms SQL Server.