2010-02-16 43 views
0

例如,TSQL - 如何在另一列中提取具有最小值和最大值的列

我有2個表客戶和訂單

客戶 有列 客戶ID,名稱

訂單已經列的OrderID,OrderedOn

其中OrderedOn是一個DateTime

現在我想要一個查詢哪個會給我

CustomerID OrderID和OrderTally

其中OrderTally =「初始」在中間 和 OrderTally =「最終」如果最後的順序,是在30天前,

一級 OrderTally =「InMiddle」一切我想創建一個案例語句OrderTally

掙扎

如何檢查是否將訂單是第一個或最後或中間

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

我正在考慮編寫排名聲明,然後檢查它是否是第一個排名,如果排名=所有訂單的總數然後最後......但這看起來有點複雜。

有沒有簡單的方法來做到這一點?

回答

2

如何:

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個數量爲分類爲「初始」或「最終」。但這似乎是一個合理的假設。

相關問題