Tengo una consulta que cuenta las fechas de boda de los miembros en la base de datos.
SELECT
SUM(NumberOfBrides) AS [Wedding Count]
, DATEPART( wk, WeddingDate) AS [Week Number]
, DATEPART( year, WeddingDate) AS [Year]
FROM MemberWeddingDates
GROUP BY DATEPART(year, WeddingDate), DATEPART(wk, WeddingDate)
ORDER BY SUM(NumberOfBrides) DESC
¿Cómo calculo cuándo el comienzo y el final de cada semana se representan en el conjunto de resultados?
SELECT
SUM(NumberOfBrides) AS [Wedding Count]
, DATEPART(wk, WeddingDate) AS [Week Number]
, DATEPART(year, WeddingDate) AS [Year]
, ??? AS WeekStart
, ??? AS WeekEnd
FROM MemberWeddingDates
GROUP BY DATEPART(year, WeddingDate), DATEPART(wk, WeddingDate)
ORDER BY SUM(NumberOfBrides) DESC
sql
sql-server
date
sql-server-2005
week-number
digiguru
fuente
fuente
DATEFIRST
a cualquier valor distinto de 7 rompe esto.Aquí hay una
DATEFIRST
solución agnóstica:fuente
también puedes usar esto:
fuente
Ampliando la respuesta de @ Tomalak . La fórmula funciona para días distintos del domingo y el lunes, pero debe usar valores diferentes para dónde está el 5. Una forma de llegar al valor que necesita es
aquí hay un enlace al documento: https://msdn.microsoft.com/en-us/library/ms181598.aspx
Y aquí hay una tabla que lo presenta para ti.
Pero no tiene que recordar esa tabla y solo la fórmula, y en realidad también podría usar una ligeramente diferente. La principal necesidad es usar un valor que haga que el resto sea el número correcto de días.
Aquí hay un ejemplo de trabajo:
Este método sería independiente de la
DATEFIRST
Configuración, que es lo que necesitaba ya que estoy construyendo una dimensión de fecha con métodos de varias semanas incluidos.fuente
Aquí hay otra versión. Si su escenario requiere que el sábado sea el primer día de la semana y el viernes el último día de la semana, el siguiente código se encargará de eso:
fuente
La siguiente consulta proporcionará datos entre el inicio y el final de la semana actual a partir del domingo al sábado
fuente
Dividamos el problema en dos partes:
1) Determine el día de la semana
Las
DATEPART(dw, ...)
declaraciones de un número, 1 ... 7, en relación conDATEFIRST
el establecimiento ( docs ). La siguiente tabla resume los posibles valores:La última columna contiene el valor ideal del día de la semana para las semanas de lunes a domingo *. Con solo mirar el gráfico, obtenemos la siguiente ecuación:
2) Calcule el lunes y el domingo para la fecha dada
Esto es trivial gracias al valor del día de la semana. Aquí hay un ejemplo:
Salida:
* Para las semanas de domingo a sábado, debe ajustar la ecuación solo un poco, como agregar 1 en algún lugar.
fuente
Si el domingo se considera el día de inicio de la semana, aquí está el código
fuente
Acabo de encontrar un caso similar con este, pero la solución aquí parece no ayudarme. Así que trato de resolverlo por mí mismo. Solo calculo la fecha de inicio de la semana, la fecha de finalización de la semana debe tener una lógica similar.
fuente
La respuesta más votada funciona bien, excepto durante la primera semana y la última semana del año. Por ejemplo, si el valor de WeddingDate es '2016-01-01', el resultado será 2015-12-27 y 2016-01-02 , pero la respuesta correcta es 2016-01-01 y 2016-01-02 .
Prueba esto:
El resultado se parece a:
Funciona para todas las semanas, 1ª u otras.
fuente
Fecha de inicio y finalización de la semana desde la fecha para la fórmula de Power BI Dax
fuente
Esta es mi solucion
fuente
Obtener fecha de inicio y fecha de finalización por fecha personalizada
fuente
Tengo una forma diferente, es seleccionar el día de inicio y el día de fin de semana actual:
fuente
Otra forma de hacerlo:
Explicación:
select datediff(week, 0, @wedding_date) as week_number
dateadd(week, @week_number, @end_weekday)
: agrega el número dado de semanas y el número dado de días en la fecha del calendario inicial ' 1900-01-01 'fuente
Esto no viene de mí, pero hizo el trabajo independientemente:
Lo encontré aquí .
fuente
No estoy seguro de cuán útil sea esto, pero terminé aquí buscando una solución en Netezza SQL y no pude encontrar una en el desbordamiento de pila.
Para IBM netezza, usaría algo (para el lunes de inicio de semana, el domingo de fin de semana) como:
seleccione next_day (WeddingDate, 'SUN') -6 como WeekStart,
next_day (WeddingDate, 'SUN') como WeekEnd
fuente
para consultas de acceso, puede utilizar el siguiente formato como campo
Cálculo directo permitido ..
fuente