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

时间:2010-02-16 08:23:30

标签: sql sql-server tsql

例如

我有2个表客户和订单

客户 有专栏 CustomerID,名称

订单包含OrderID,OrderedOn

其中OrderedOn是DateTime

现在我想要一个能给我

的查询

CustomerID OrderID和OrderTally

其中OrderTally =第一个订单的'Initial' OrderTally ='InMiddle'用于中间的一切 和 OrderTally ='最终'如果是最后一个订单并且是30天前,

我正在尝试为OrderTally创建一个Case语句

并且苦苦挣扎

如何检查OrderID是第一个还是最后一个还是中间

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

我正在考虑编写排名声明,然后检查排名是否是第一位,如果排名=所有订单的总计数,那么最后......但这看起来有点复杂。

有没有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分: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个订单被归类为“Initial”或“Final”。但这似乎是一个合理的假设。