J'écris une requête dans laquelle je dois obtenir les données de l'année dernière seulement. Quelle est la meilleure façon de procéder?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Josh Mein
la source
la source
J'ai trouvé cette page en cherchant une solution qui m'aiderait à sélectionner les résultats d'une année civile précédente. La plupart des résultats indiqués ci-dessus semblent renvoyer des articles des 365 derniers jours, ce qui n'a pas fonctionné pour moi.
En même temps, cela m'a donné suffisamment de directives pour résoudre mes besoins dans le code suivant - que je poste ici pour tous les autres qui ont le même besoin que le mien et qui peuvent rencontrer cette page à la recherche d'une solution.
Merci à ceux ci-dessus dont les solutions m'ont aidé à arriver à ce dont j'avais besoin.
la source
Eh bien, je pense qu'il manque quelque chose ici. L'utilisateur souhaite obtenir des données de l'année dernière et non des 365 derniers jours. Il y a une énorme différence. À mon avis, les données de l'année dernière sont toutes les données de 2007 (si je suis en 2008 maintenant). La bonne réponse serait donc:
Ensuite, si vous souhaitez restreindre cette requête, vous pouvez ajouter un autre filtre, mais en recherchant toujours l'année dernière.
la source
Rechercher dateadd dans BOL
la source
Le plus lisible, IMO:
Lequel:
Il existe des variantes avec DATEDIFF et DATEADD pour vous obtenir à minuit d'aujourd'hui, mais elles ont tendance à être plutôt obtuses (bien que légèrement meilleures en termes de performances - pas que vous remarquiez par rapport aux lectures nécessaires pour récupérer les données).
la source
GETDATE () renvoie la date et l'heure actuelles .
Si l'année dernière commence à minuit du jour en cours l'année dernière (comme dans l'exemple d'origine), vous devez utiliser quelque chose comme:
la source
Les autres suggestions sont bonnes si vous avez "SQL uniquement".
Cependant, je suggère, si possible , de calculer la date dans votre programme et de l'insérer sous forme de chaîne dans la requête SQL.
Au moins pour les grandes tables (c'est-à-dire plusieurs millions de lignes, peut-être combinées avec des jointures), cela vous donnera une amélioration considérable de la vitesse car l'optimiseur peut fonctionner beaucoup mieux avec cela.
la source
argument pour la fonction DATEADD:
datepart peut être: aa, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms
nombre est une expression qui peut être résolue en un entier qui est ajouté à une partie de date de date
date est une expression qui peut être résolue en une valeur time, date, smalldatetime, datetime, datetime2 ou datetimeoffset.
la source
la source
Comme @DE White, je suis venu ici pour des raisons similaires mais différentes de celles de la question initiale. La question d'origine concerne les 365 derniers jours. La réponse de @ samjudson fournit cela. La réponse de @DE White renvoie les résultats de l'année civile précédente.
Ma requête est un peu différente en ce qu'elle fonctionne pour l' année précédente jusqu'à la date actuelle incluse:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Par exemple, le 17 février 2017, cette requête renvoie les résultats du 01/01/2016 au 17/02/2017
la source
J'ai eu un problème similaire, mais le codeur précédent n'a fourni que la date au format mm-aaaa. Ma solution est simple mais pourrait s'avérer utile à certains (je voulais aussi m'assurer que les espaces de début et de fin étaient éliminés):
la source
Pour une raison quelconque, aucun des résultats ci-dessus n'a fonctionné pour moi.
Cela sélectionne les 365 derniers jours.
la source