Agrupar por semanas

29/12/2007 - 21:37 por Clara | Informe spam
Hola,

Tengo unas tablas asi (en SQL Server 2005):


CREATE TABLE t (IDTrabajador int FK, ImporteA money, ImporteB money, fecha
smalldatetime)
(IDTrabajador hace referencia a la tabla de trabajadores)

Lo que yo necesito obtener, son las sumas de ImporteA y ImporteB agrupadas
por semanas.
Deberia quedar algo así:

Nombre ImporteA ImporteB FechaInicioSemana
MIGUEL 123,34 1567,34 12/12/2006
CLARA 1238,00 23123,89 19/12/2006
.

El campo FechaInicioSemana, deberia ser la fecha mas pequeña de la semana
del registro agrupado (idealmente, deberia ser la fecha segura del inicio de
semana del registro agrupado).

Tengo esto:

SET DATEFIRST 6 --Sábado
...

SELECT SUM(ImporteA) as ImporteA,
SUM(ImporteB) as ImporteB,
FROM T
GROUP BY DATEPART(ww, fecha)

Pero no sé como hacer para que me devuelva la fecha de inicio de la semana
que está agrupando, o en su defecto, la menor de las fechas que forman parte
de la semana.

Grácias.
 

Leer las respuestas

#1 Anonimo
31/12/2007 - 19:01 | Informe spam
Hola Clara,

Revisa la información de la función DATEPART. Te incluyo un consulta de
ejemplo.

SET LANGUAGE spanish

DECLARE @MiFecha datetime
SET @MiFecha = '30/12/2007'

SELECT
@MiFecha AS FECHA,
DATEPART(week, @MiFecha) AS NUM_SEMANA,
@MiFecha - (DATEPART(weekday, @MiFecha) - 1) AS INICIO_SEMANA

Espero que te sea útil. Saludos,
GuilleSQL

http://www.guillesql.es



"Clara" wrote in message
news:
Hola,

Tengo unas tablas asi (en SQL Server 2005):


CREATE TABLE t (IDTrabajador int FK, ImporteA money, ImporteB money, fecha
smalldatetime)
(IDTrabajador hace referencia a la tabla de trabajadores)

Lo que yo necesito obtener, son las sumas de ImporteA y ImporteB agrupadas
por semanas.
Deberia quedar algo así:

Nombre ImporteA ImporteB FechaInicioSemana
MIGUEL 123,34 1567,34 12/12/2006
CLARA 1238,00 23123,89 19/12/2006
.

El campo FechaInicioSemana, deberia ser la fecha mas pequeña de la semana
del registro agrupado (idealmente, deberia ser la fecha segura del inicio
de
semana del registro agrupado).

Tengo esto:

SET DATEFIRST 6 --Sábado
...

SELECT SUM(ImporteA) as ImporteA,
SUM(ImporteB) as ImporteB,
FROM T
GROUP BY DATEPART(ww, fecha)

Pero no sé como hacer para que me devuelva la fecha de inicio de la semana
que está agrupando, o en su defecto, la menor de las fechas que forman
parte
de la semana.

Grácias.




Preguntas similares