Selon votre SGBD, quelque chose comme ceci fonctionnera :
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;
Cela crée 5 groupes ou morceaux, quel que soit le nombre de lignes, comme vous l'avez demandé.
Si vous n'avez pas de fonctions de fenêtrage, vous pouvez le simuler :
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
J'ai fait quelques hypothèses ici telles que Id
en commençant par 1 et qu'il n'y a pas d'espace, et que vous voudriez que le dernier groupe soit trop petit au lieu d'être trop grand si les choses ne se répartissaient pas uniformément. J'ai également supposé que la division entière se traduirait comme dans Ms SQL Server.