2010-02-16 86 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个数量为分类为“初始”或“最终”。但这似乎是一个合理的假设。

相关问题