Comment le groupe par plage de dates en SQL
Dessin de cette d'autres postes de StackOverflow.com que j'ai trouvé utile.
Je me demandais si il est possible de groupe à l'aide de plages de dates que je n'ai pas de définition explicite de la.
Donc, pour clarifier, dites j'ai une table de la Personne appelée et une colonne appelée Date De Naissance.
J'aimerais groupe par le nombre de personnes nées dans une période.
De sorte qu'il ressemblerait à quelque chose comme ça.
Né Comte
Mar1980 25
Apr1980 452
May1980 42
...
Dec1993 452
La période pourrait être les semaines, les mois et les trimestres.
Si j'ai utilisé l'autre solution, j'aurais besoin de spécifier chaque seule période, même avec des mois et des années, il peut prendre beaucoup de temps comme les gens de la date de naissance varie beaucoup.
select t.DOB as [dob], count(*) as [number of occurences]
from (
select user_id,
case when date >= '1980-01-01' and date < '1980-02-01 then 'Jan 1980'
when date >= '1980-02-01' and date < '1980-03-01 then 'Feb 1980'
...
when date >= '1990-03-01' and date < '1990-04-01 then 'Mar 1990'
else 'Null' end as DOB
from Person) t
group by t.DOB
Est-il une solution que vous pouvez penser qui peuvent me permettre de spécifier la taille de l'intervalle, je veux les données de plages et de groupe par ces plages de dates?
- Votre exemple de requête n'a pas de sens. Quelles sont
date
etscore
? Ce qui ne les colonnes représentent, et quels sont leurs types de données? Ce que vous voulez, c'est possible, mais votre question n'est pas de répondre sans certains des DDL et de l'échantillon de données. - la chose que j'ai collé il y a une adaptation de la solution sur le lien. J'ai laissé un peu les choses, je vais modifier cela. Mais regardez le tableau ci-dessus que pour la façon dont je suis la planification d'affichage des données (la table avec "Né" et "Compter" que les colonnes.
- J'apprécie que vous nous avez montré la sortie. Il est impossible de fournir la solution, mais, sans savoir ce que les données d'entrée ressemble - pensez-y de cette façon: "Dis-moi comment je peux construire une maison qui ressemble <quelqu'un> maison, mais je ne vais pas vous dire ce que les matériaux ou les ressources que j'ai pour le construire." Aussi, votre question doit être aussi autonome que possible, de sorte qu'il ne dépend pas d'autres liens; de cette manière, il est consultable et peut servir comme une question avec des solutions sur son propre.
- ah ok... L'entrée est un tableau appelé Personne, avec une colonne appelée DateOfBirth qui est en datetime2 format. C'est que ce que vous demandez?
- Comment le Groupe Par Plage de dates, étape par étape, à l'aide d'Exemples peuvent être trouvés dans ce lien sqlserverlearner.com/2012/group-by-date-range-examples
Vous devez vous connecter pour publier un commentaire.
Serait quelque chose comme cette adresse que vous recherchez? L'astuce est d'utiliser et d'abuser de la CONVERTIR fonction pour obtenir vos périodes de temps pour rouler ensemble bien, et ensuite utiliser DENSE_RANK de le réduire à une monotone augmentation de la séquence .
)
SÉLECTIONNEZ * À PARTIR DES CUMULS DE R
À l'aide de la ci-dessus, j'obtiens en sortie comme
Vous pourriez probablement utiliser quelque chose comme ça et de profiter de la fonction DATEPART
S'il vous plaît. n'oubliez pas de décommenter la déclaration que vous souhaitez tester.