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 - 如何在另一列中提取具有最小值和最大值的列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用实体框架中的 DBContext 获取在另一列中具有重复数据的所有 ID?