MS SQL问题:Max和GUID

问题描述

|
select  first(orderid),accountid 
from [Order] 
group by AccountId 
order by DateCreated desc
first()是无效函数。 max()不适用于唯一标识符 如何获得为所有帐户创建的最后一个订单编号?谢谢。     

解决方法

像(未经测试的):
;WITH CTE_LatestOrders AS (
    select accountid,lastcreated = max(datecreated)
    from [Order]
    group by accountid
)
select
    accountid,orderid
from
    [Orders] o
    join CTE_LatestOrders l 
        on o.AccountID = l.AccountID 
        and o.datecreated = l.lastcreated
    ,您也可以继续下面的操作。
Select Temp.orderid,T.AccountId,T.DateCreated
From
(
    Select AccountId,max(DateCreated) as  DateCreated
    From [Order]
    Group By AccountId
)T
Inner Join [Order] Temp on Temp.AccountId = T.AccountId 
AND Temp.DateCreated = T.DateCreated
CTE不是UDT /临时表;将CTE视为仅为当前查询定义的视图。就像视图一样,将CTE展开并折叠到整个查询计划中。全局优化仍然会发生,但是不要认为仅仅因为您使用了CTE,您就只会执行一次查询。这是适合该空间的一个简单示例:WITH vw AS(SELECT COUNT(*)c FROM Person)SELECT a.c,b.c FROM vw a,vw b;查询计划将清楚地显示两个扫描/聚合和一个联接,而不是仅将相同的结果投影两次。     ,从MS SQL 2012开始,Max()确实适用于唯一标识符