Generando consulta para una tabla dada

Tengo mesa

        id  year  month  day  
         1  2012    1     1
         2  2012    1     2
         3  2012    1     3
         4  2012    1     4
         5  2012    1     5
         6  2012    1     7
         7  2012    1     8
         8  2012    1     9
         9  2012    1     10
         10 2012    1     11

de la tabla anterior, quiero generar el siguiente resultado cuando el recuento de id alcance el múltiplo de 5

          day_start day_end
             1         5   
             5         11 

preguntado el 09 de marzo de 12 a las 14:03

Debería publicar lo que ha intentado hasta ahora. -

Por favor, también publique qué RDBMS está utilizando. -

4 Respuestas

No estoy seguro de dónde vino Day_start. Esto puede darle una idea de cómo abordar este problema.

SELECT id as day_start, day as day_end
FROM MyTable
WHERE mod(id, 5) = 0

respondido 09 mar '12, 14:03

Esto funcionará en SQL Server. Utilizando el row_number en lugar de la id El valor del campo evitará errores si elimina filas y la secuencia de ID ya no está completa.

Nota:: Estoy basando esta respuesta en el hecho de que dijiste el "recuento de identificación" llega a 5, y no "el valor de la identificación". lo que para mi significa "cada 5 registros, independientemente del valor de identificación". Si ese no es el caso, deje un comentario y eliminaré esta respuesta, ya que la de Mark funcionará bien.

select case when rownumber = 5 then 1 else rownumber - 5 end as day_start, day_end
from
(
    select row_number() over (order by id) as RowNumber, [day] as day_end
    from table1
) t
where rownumber % 5 = 0

respondido 09 mar '12, 14:03

Asumiendo MySQL, intente:

select min(coalesce(p.day,c.day)) day_start, max(c.day) day_end
from my_table c
left join my_table p on p.id = c.id-1
group by floor((c.id-1)/5)

respondido 09 mar '12, 14:03

SELECT CASE id WHEN 5 THEN 1 ELSE id - 5 END AS day_start, day AS day_end
FROM [TableName]
WHERE id % 5 = 0

respondido 09 mar '12, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.