2010-09-29 3 views
4

J'essaie de comprendre comment comparer les données du jour actuel aux données d'une semaine, 2 semaines, etc. 2 colonnes:Comparer les données de lundi aux lundis précédents dans SQL Server

Order table 
----------- 
OrderID int identity 
OrderDate datetime 

Si aujourd'hui, est le lundi, je voudrais être en mesure de comparer le nombre de commandes à partir d'aujourd'hui les lundis précédents pour une année entière. Est-ce possible avec une seule requête SQL Server? J'utilise SQL 2008 si cela fait une différence.

+0

Que voulez-vous dire par "comparer"? Un exemple de sortie aiderait. – RedFilter

Répondre

1
select CAST (OrderDate as date) as [Date], COUNT(*) 
from Orders 
where OrderDate > DATEADD(YEAR,-1, getdate()) 
    and DATEPART(DW,OrderDate) = DATEPART(DW,GETDATE()) 
group by CAST (OrderDate as date) 
+0

Très bien - merci! – Jason

1

Essayez

SELECT [ColumnsYouWant] 
FROM [OrderTable] 
WHERE datepart(weekday, OrderDate) = datepart(weekday, getdate()) 
    AND OrderDate >= dateadd(yyyy, -1, getdate()) 
1

Cela vous donne lundi par ordre compte numéro de la semaine:

select year(OrderDate) as Year, 
    DATEPART(WEEK, OrderDate) as Week, 
    COUNT(*) as MondayOrderCount 
from Order 
where DATEPART(WEEKDAY, OrderDate) = 2 
group by year(OrderDate), DATEPART(WEEK, OrderDate) 
order by Year, Week