为什么我在使用分区而不是分组+分区时获得更多记录?

时间:2016-04-13 23:37:02

标签: sql sql-server

作为新手,我正在使用AdventureWorks2014数据库,我正在努力获得每个客户的最新3个订单"。

select CustomerID,
       OrderDate from 
      (select row_number() over(partition by CustomerID 
         order by OrderDate desc) as rownumber,
             CustomerID,
             OrderDate 
             from sales.SalesOrderHeader) as x
                 where rownumber <=3

此查询结果为28.586行。之后我尝试在同一查询中使用group by。

   select CustomerID,
          OrderDate from 
          (select row_number() over(partition by CustomerID order by              
            OrderDate desc) as rownumber,
             CustomerID,
             OrderDate 
             from sales.SalesOrderHeader) as x
               where rownumber <=3
               GROUP BY CustomerID,OrderDate

但是包含GROUP BY运算符的查询结果为28.575行。我检查了第一个和最后一个客户,它们都是一样的。 现在问题是这样的;是什么造成的?为什么GROUP BY子句减少了结果中显示的总行数?哪个查询给出了真实结果?

1 个答案:

答案 0 :(得分:1)

因为某些订单的日期相同 您可以通过添加HAVING Count(1) > 1来查找Group By