Tenho uma consulta que conta as datas de casamento dos membros no banco de dados.
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
Como faço para saber quando o início e o final de cada semana representados no 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
fonte
fonte
DATEFIRST
para qualquer coisa diferente de 7 quebra isso.Aqui está uma
DATEFIRST
solução agnóstica:fonte
você também pode usar isto:
fonte
Expandindo a resposta de @ Tomalak . A fórmula funciona para dias diferentes de domingo e segunda-feira, mas você precisa usar valores diferentes para onde o 5 é. Uma maneira de chegar ao valor que você precisa é
aqui está um link para o documento: https://msdn.microsoft.com/en-us/library/ms181598.aspx
E aqui está uma tabela que apresenta isso para você.
Mas você não precisa se lembrar daquela tabela e apenas da fórmula, e na verdade você poderia usar uma ligeiramente diferente também. A principal necessidade é usar um valor que fará com que o restante tenha o número correto de dias.
Aqui está um exemplo prático:
Este método seria independente do
DATEFIRST
Cenário, que é o que eu precisava, pois estou construindo uma dimensão de data com vários métodos de semanas incluídos.fonte
Aqui está outra versão. Se o seu cenário exige que sábado seja o primeiro dia da semana e sexta-feira seja o último dia da semana, o código a seguir tratará disso:
fonte
A consulta abaixo fornecerá dados entre o início e o final da semana atual começando de domingo a sábado
fonte
Vamos dividir o problema em duas partes:
1) Determine o dia da semana
O
DATEPART(dw, ...)
retorna um número, 1 ... 7, relativo àDATEFIRST
configuração ( docs ). A tabela a seguir resume os valores possíveis:A última coluna contém o valor ideal do dia da semana para as semanas de segunda a domingo *. Apenas olhando para o gráfico, chegamos à seguinte equação:
2) Calcule a segunda e o domingo para determinada data
Isso é trivial graças ao valor do dia da semana. Aqui está um exemplo:
Resultado:
* Para as semanas de domingo a sábado, você precisa ajustar um pouco a equação, como adicionar 1 em algum lugar.
fonte
Se domingo for considerado dia de início da semana, aqui está o código
fonte
Acabei de encontrar um caso semelhante com este, mas a solução aqui parece não me ajudar. Então, tento descobrir sozinha. Eu calculo a data de início da semana apenas, a data de final da semana deve ter uma lógica semelhante.
fonte
A resposta mais votada funciona bem, exceto para a primeira semana e a última semana de um ano. Por exemplo, se o valor de WeddingDate for '2016-01-01', o resultado será 2015-12-27 e 2016-01-02 , mas a resposta certa é 2016-01-01 e 2016-01-02 .
Experimente isto:
O resultado é parecido com:
Funciona durante todas as semanas, 1ª ou outras.
fonte
Data de início e término da semana para a fórmula Power BI Dax
fonte
Esta é a minha solução
fonte
Obter data de início e data de término por data personalizada
fonte
Eu tenho um jeito diferente, é selecionar dia Início e dia Fim da Semana Atual:
fonte
Outra maneira de fazer isso:
Explicação:
select datediff(week, 0, @wedding_date) as week_number
dateadd(week, @week_number, @end_weekday)
: adiciona o número fornecido de semanas e o número fornecido de dias na data inicial do calendário ' 1900-01-01 'fonte
Isso não veio de mim, mas fez o trabalho de qualquer maneira:
Eu encontrei aqui .
fonte
Não tenho certeza de como isso é útil, mas acabei aqui procurando uma solução no Netezza SQL e não consegui encontrar uma no estouro de pilha.
Para IBM netezza, você usaria algo (para o início da semana na segunda, o sol do fim de semana) como:
selecione next_day (WeddingDate, 'SUN') -6 como WeekStart,
next_day (WeddingDate, 'SUN') como WeekEnd
fonte
para consultas de acesso, você pode usar o formato abaixo como um campo
Cálculo direto permitido ..
fonte