web-dev-qa-db-fra.com

Sélectionnez les données des 3 derniers mois

J'ai besoin d'aide pour sélectionner les données dont la date est dans les 3 mois précédents. (note: je ne demande pas pour les 3 derniers mois c'est-à-dire DATEADD(MONTH, -3, GETDATE()))

La raison pour laquelle je ne veux pas utiliser la méthode DATEADD est que cette requête pourrait être exécutée au milieu du mois et je ne veux pas qu'elle renvoie des données menant jusqu'à ce point

3
A.Cassin

Vous pouvez utiliser cette méthodologie pour déterminer le premier jour d'il y a 3 mois et le dernier jour du mois précédent:

select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0)   --First day of 3 months ago
select DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) --Last Day of previous month

Ensuite, utilisez-le simplement sur votre clause where.

declare @start date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0)
declare @end date = DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1)

select *
from table
where dateField between @start and @end

Si votre dateField est datetime, vous devez ajouter les secondes, ou simplement ajouter un jour et utiliser un < opérande pour ne pas rater le dernier jour

declare @start date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0)
declare @end date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)        --First day of current month

select *
from table
where dateField >=@start and dateField < @end
4
scsimon