Please help me undestand how order by influences to over clause. I have read msdn and one book and still misunderstood.
Let’s say we have such query:
SELECT Count(OrderID) over(Partition By Year(OrderDate))
,*
FROM [Northwind].[dbo].[Orders]
ORDER BY OrderDate
The result is that each raw has the column with the value how many entries in the table have the same year.
alt text http://img-fotki.yandex.ru/get/3912/svin80.2/0_3b871_3bb591da_XL
But what’s happened when i try this query?:
SELECT ROW_NUMBER() over(Partition By Year(OrderDate)
order by OrderDate) as RowN
,*
FROM [Northwind].[dbo].[Orders]
ORDER BY RowN
alt text http://img-fotki.yandex.ru/get/3908/svin80.2/0_3b872_c9352fb1_XL
Now I see the only thing that each RowN has 3 different years for each value (1996, 1997, 1998). I expected that RowN will be the same value for all 1996 year dates. Please explain me what happens and why.
In this case:
What you’re seeing it it’s giving you a row number that is partitioned by year, meaning that each year has it’s own climbing row number. To make this a bit cleaerer in the results:
This means that each year, say 1997, will have orders 1 through n ordered by the date that year…like this was the 1st order of 1997, 2nd order of 1997, etc.