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
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