Проблема MS SQL: Макс и GUID - PullRequest
1 голос
/ 26 мая 2011
select  first(orderid), accountid 
from [Order] 
group by AccountId 
order by DateCreated desc

first () - недопустимая функция.

max () не работает для уникальных идентификаторов

Как получить последний ордер, созданный для всех учетных записей?Спасибо.

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Что-то вроде (не проверено):

;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
0 голосов
/ 23 апреля 2014

Макс () работает для уникальных идентификаторов с MS SQL 2012

0 голосов
/ 26 мая 2011

Вы также можете перейти к следующему.

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 / temp;думайте о CTE как о представлении, которое определено только для вашего текущего запроса.Как и представление, CTE расширяется и складывается в общий план запросов.Глобальная оптимизация все еще будет происходить, но не думайте, что только потому, что вы используете CTE, вы будете выполнять запрос только один раз.Вот тривиальный пример, который вписывается в это пространство: WITH vw AS (SELECT COUNT (*) c FROM Person) SELECT ac, bc FROM vw a, vw b;План запроса будет четко показывать два сканирования / агрегации и объединение вместо того, чтобы просто проецировать один и тот же результат дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...