J'ai une requête qui compte les dates de mariage des membres dans la base de données.
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
Comment déterminer quand le début et la fin de chaque semaine sont représentés dans le jeu de résultats?
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
la source
la source
DATEFIRST
sur autre chose que 7 casse cela.Voici une
DATEFIRST
solution agnostique:la source
vous pouvez également utiliser ceci:
la source
Développement de la réponse de @ Tomalak . La formule fonctionne pour les jours autres que dimanche et lundi, mais vous devez utiliser des valeurs différentes pour l'emplacement du 5. Une façon d'arriver à la valeur dont vous avez besoin est
voici un lien vers le document: https://msdn.microsoft.com/en-us/library/ms181598.aspx
Et voici un tableau qui le présente pour vous.
Mais vous n'avez pas à vous souvenir de ce tableau et uniquement de la formule, et en fait, vous pouvez également en utiliser un légèrement différent.Le besoin principal est d'utiliser une valeur qui fera du reste le nombre correct de jours.
Voici un exemple de travail:
Cette méthode serait indépendante du
DATEFIRST
paramètre, ce dont j'avais besoin car je construis une dimension de date avec plusieurs méthodes de semaine incluses.la source
Voici une autre version. Si votre scénario nécessite que samedi soit le 1er jour de la semaine et que vendredi soit le dernier jour de la semaine, le code ci-dessous gérera cela:
la source
La requête ci-dessous donnera des données entre le début et la fin de la semaine en cours du dimanche au samedi
la source
Décomposons le problème en deux parties:
1) Déterminez le jour de la semaine
Le
DATEPART(dw, ...)
renvoie un nombre, 1 ... 7, par rapport auDATEFIRST
paramètre ( docs ). Le tableau suivant résume les valeurs possibles:La dernière colonne contient la valeur idéale du jour de la semaine pour les semaines du lundi au dimanche *. En regardant simplement le graphique, nous arrivons à l'équation suivante:
2) Calculez le lundi et le dimanche pour une date donnée
C'est trivial grâce à la valeur du jour de la semaine. Voici un exemple:
Production:
* Pour les semaines du dimanche au samedi, vous devez ajuster légèrement l'équation, comme ajouter 1 quelque part.
la source
Si le dimanche est considéré comme le jour de début de la semaine, voici le code
la source
Je viens de rencontrer un cas similaire avec celui-ci, mais la solution ici ne semble pas m'aider. Alors j'essaye de comprendre par moi-même. Je travaille uniquement sur la date de début de la semaine, la date de fin de semaine doit être de logique similaire.
la source
La réponse la plus votée fonctionne bien sauf pour la 1ère semaine et la dernière semaine de l'année. Par exemple, si la valeur de WeddingDate est « 01/01/2016 », le résultat sera 27/12/2015 et 02/01/2016 , mais la bonne réponse est 01/01/2016 et 02/01/2016 .
Essaye ça:
Le résultat ressemble à:
Cela fonctionne pour toutes les semaines, 1ère ou autres.
la source
Date de début et de fin de la semaine Du Date pour la formule Power BI Dax
la source
C'est ma solution
la source
Obtenir la date de début et la date de fin par date personnalisée
la source
J'ai un autre moyen, c'est sélectionner le jour de début et le jour de fin de semaine en cours:
la source
Une autre façon de le faire:
Explication:
select datediff(week, 0, @wedding_date) as week_number
dateadd(week, @week_number, @end_weekday)
: ajoute le nombre de semaines et le nombre de jours donnés à la date initiale du calendrier ' 1900-01-01 'la source
Cela ne vient pas de moi, mais cela a fait le travail malgré tout:
Je l'ai trouvé ici .
la source
Je ne sais pas à quel point cela est utile, mais j'ai fini par chercher une solution sur Netezza SQL et je n'ai pas pu en trouver une sur le débordement de pile.
Pour IBM netezza, vous utiliseriez quelque chose (pour le lundi de début de semaine, le soleil de fin de semaine) comme:
sélectionnez next_day (WeddingDate, 'SUN') -6 comme WeekStart,
next_day (WeddingDate, 'SUN') comme WeekEnd
la source
pour les requêtes d'accès, vous pouvez utiliser le format ci-dessous en tant que champ
Calcul direct autorisé.
la source