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

Posted

技术标签:

【中文标题】TSQL - 如何在另一列中提取具有最小值和最大值的列【英文标题】:TSQL - How to extract column with the Minimum and Maximum Value in another column 【发布时间】:2010-02-16 08:23:29 【问题描述】:

例如。

我有 2 张表客户和订单

客户 有列 客户 ID、姓名

Orders 有列 OrderID、OrderedOn

OrderedOn 是一个日期时间

现在我想要一个查询,它会给我

CustomerID OrderID 和 OrderTally

其中 OrderTally = 'Initial' 表示第一个订单 OrderTally = 'InMiddle' 表示中间的所有内容 和 OrderTally = 'Final' 如果它是最后一个订单并且是 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】:

这个怎么样:

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 个订单被归类为“初始”或“最终”。但这似乎是一个合理的假设。

【讨论】:

以上是关于TSQL - 如何在另一列中提取具有最小值和最大值的列的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一列中显示最大日期金额?

SQL group by:选择另一列有其最小值/最大值的值

如何使用实体框架中的 DBContext 获取在另一列中具有重复数据的所有 ID?

SQL:在一列中获取最小值和最大值

关于Excel判断一列数据是不是在另一列中存在,并且把存在的数据提取出来

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘