TSQL - Как извлечь столбец с минимальным и максимальным значением в другом столбце - PullRequest
0 голосов
/ 16 февраля 2010

например.

У меня есть 2 таблицы клиентов и заказов

Клиенты имеет столбцы CustomerID, Имя

Заказы имеют столбцы OrderID, OrderedOn

, где OrderedOn - это DateTime

Теперь я хочу запрос, который даст мне

CustomerID OrderID и OrderTally

где OrderTally = 'Initial' для первого заказа OrderTally = 'InMiddle' для всего в середине а также OrderTally = 'Final', если это последний заказ и был 30 дней назад,

Я пытаюсь создать оператор Case для OrderTally

и изо всех сил

Как проверить, является ли OrderID первым, последним или средним

 -- The First Order
 CASE WHEN OrderID IN (...)
 THEN 'Initial'
 -- The Last Order
 WHEN OrderID IN (...)
 THEN 'Final'
 ELSE
 'InTheMiddle'
 END

Я думал о написании рейтинговых утверждений, а затем проверил, является ли его ранг первым, а если rank = общее количество всех ордеров, то последний ... но это кажется немного сложным.

Есть ли простой способ сделать это?

1 Ответ

2 голосов
/ 16 февраля 2010

Как насчет этого:

SELECT o.CustomerId, o.OrderId, 
    CASE 
        WHEN o.OrderedOn = o2.FirstOrderDate THEN 'Initial'
        WHEN o.OrderedOn = o2.LastOrderDate THEN 'Final'
        ELSE 'InTheMiddle'
    END AS OrderTally
FROM [Orders] o
    JOIN
    (
        SELECT CustomerId, MIN(OrderedOn) AS FirstOrderDate, MAX(OrderedOn) AS LastOrderDate
        FROM [Orders]
        GROUP BY CustomerId
    ) o2 ON o.CustomerId = o2.CustomerId

Я сделал предположение, что у клиента не будет 2 заказов с одинаковой датой / временем OrderOn - в противном случае это может привести к тому, что 2 заказа будут классифицированы как «Начальный» или «Окончательный». Но это казалось разумным предположением.

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