Sé que voy a decir 'duh' cuando veo la respuesta a esto, pero no obstante:¿Cómo se agrupa un campo de fecha por semana, donde las semanas comienzan el sábado?
¿Cómo se agrupa un campo de fecha por semana, donde las semanas comienzan el sábado?
Sé que voy a decir 'duh' cuando veo la respuesta a esto, pero no obstante:¿Cómo se agrupa un campo de fecha por semana, donde las semanas comienzan el sábado?
¿Cómo se agrupa un campo de fecha por semana, donde las semanas comienzan el sábado?
Es necesario utilizar primero DATEFIRST para establecer Saturday
como el primer día de tu semana El valor indica el lunes y el valor indica el día sábado. Luego puede usar el DATEPART con week
o wk
o ww
para agrupar los valores de la columna de fecha.
Se puede ver en los datos de ejemplo a continuación que los valores para las fechas 2012-01-07
y 2012-01-08
se agrupan bajo weekno porque 2012-01-07 es una Sábado. El 1 de enero de de cualquier año es siempre la primera semana del año.
Click here to view the output in SQL Fiddle.
Guión:
CREATE TABLE weekdays
(
datevalue datetime NOT NULL
, numericvalue INT NOT NULL
);
INSERT INTO weekdays (datevalue, numericvalue) VALUES
('2012-01-01', 4),
('2012-01-02', 1),
('2012-01-07', 2),
('2012-01-08', 8),
('2012-01-14', 3),
('2012-01-15', 2),
('2012-01-19', 6);
SET DATEFIRST 6;
SELECT DATEPART(wk, datevalue) weekno
, SUM(numericvalue) totalvalue
FROM weekdays
GROUP BY DATEPART(wk, datevalue)
salida:
weekno totalvalue
------ ----------
1 5
2 10
3 11
OK, no probado, ya que no tenemos al alcance de SQL Server, aunque traducción directamente en MySQL parecía funcionar como se esperaba:
SELECT *
FROM (SELECT your_date_field,
DATEADD(D,
-(DATEPART(DW,your_date_field) MOD 7), your_date_field) AS saturday
FROM your_table)
GROUP BY saturday
ORDER BY your_date_field
tenido problemas reales con esto, pero esto impide que las tablas adicionales y DATEFIRST que se pueden prevenir desde ha fijado . Aquí está mi respuesta usando el método de fecha conocida y los registros de llamadas que se recuperan.
19000101 = Lunes - siempre es fácil de recordar, por tanto, establecer el sábado como 19000106
SELECT MIN(dateadd(day, datediff(
day,'19000106', CallRecords.CallStartTime)/7*7, '19000106'))
AS CallStartTime
FROM CallRecords
GROUP BY DATEDIFF(day,'19000106', CallRecords.CallStartTime)/7
Probado en SQL Server y SQL Server Compact 4.0
Se debe utilizar la función de DATEPART
como:
SELECT DATEPART(wk, Date), SUM(Value)
FROM Table
GROUP BY DATEPART(wk, Date)
Espero que esto te ayude.
+1 por esfuerzo. Sin embargo, no puedo decir si funcionó o no, ya que la respuesta de Siva no fue tan asombrosa. –
Eso es realmente lo único que realmente envidio de otros dbms ... la capacidad de usar alias de la cláusula de selección en otras partes de la consulta. –