No existe tal funcionalidad en "funciones estándar de SQL", pero es posible obtener el resultado deseado mediante el uso de algunos trucos.
Con la subconsulta que se ilustra a continuación, creamos un campo virtual que puede usar para GROUP BY
en la consulta externa. El valor de este campo virtual se incrementa cada vez que hay un espacio en la secuencia de oID
. De esta manera se crea un identificador para cada una de esas "islas de datos": tabla y los datos
SELECT SUM(Area), COUNT(*) AS Count_Rows
FROM (
/* @group_enumerator is incremented each time there is a gap in oIDs continuity */
SELECT @group_enumerator := @group_enumerator + (@prev_oID != oID - 1) AS group_enumerator,
@prev_oID := oID AS prev_oID,
sample_table.*
FROM (
SELECT @group_enumerator := 0,
@prev_oID := -1
) vars,
sample_table
/* correct order is very important */
ORDER BY
oID
) q
GROUP BY
group_enumerator
prueba generación:
CREATE TABLE sample_table (oID INT auto_increment, Area INT, PRIMARY KEY(oID));
INSERT INTO sample_table (oID, Area) VALUES (1,5), (2,2), (3,3), (5,3), (6,4), (7,5);
necesito agradecer Quassnoi por señalar this trick in my related question ;-)
ACTUALIZACIÓN: tabla y datos de prueba agregados y nombre de columna duplicado fijo en la consulta de ejemplo.
esto también es posible sin usar tablas temporales. – Kaii