首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找一个字段的值,该值与另一个字段中数据的最大值相匹配。

查找一个字段的值,该值与另一个字段中数据的最大值相匹配。
EN

Stack Overflow用户
提问于 2011-01-22 17:50:35
回答 3查看 792关注 0票数 3

我试图编写一个查询,该查询获取一个字段的值,该字段与另一个字段(或多个字段)的最大值相关联。假设我有以下数据表:

代码语言:javascript
复制
OrderID CustomerID  OrderDate   LocationID          
1       4           1/1/2001    1001
2       4           1/2/2001    1003
3       4           1/3/2001    1001
4       5           1/4/2001    1001
5       5           1/5/2001    1001
6       5           1/6/2001    1003
7       5           1/7/2001    1002
8       5           1/8/2001    1003
9       5           1/8/2001    1002

CustomerID分组,我希望得到最大OrderDate,然后是与最大OrderDate相关联的LocationID。如果有几条记录共享最大订购日期,则从具有最大日期的记录中提取与最大OrderID相关联的OrderID

最后一组数据应该如下所示:

代码语言:javascript
复制
CustomerID  OrderDate   LocationID      
4           1/3/2001    1001
5           1/8/2001    1002

我一直试图编写一个包含大量嵌套子查询和丑陋联接的查询,但我并没有真正做到这一点。我需要写什么SQL来帮助我获得这个结果。

EN

回答 3

Stack Overflow用户

发布于 2011-01-22 17:53:06

代码语言:javascript
复制
with cte As
(
select *, 
        row_number() over (partition by CustomerID 
                           order by OrderDate desc, OrderId desc) as rn
from yourtable
)
select CustomerID, OrderDate,LocationID
from cte 
where rn=1;
票数 5
EN

Stack Overflow用户

发布于 2011-01-22 18:09:30

代码语言:javascript
复制
SELECT
   C.Name,
   C.CustomerID,
   X.*
FROM
   Customers C
   CROSS APPLY (
      SELECT TOP 1 OrderDate, LocationID
      FROM Orders O
      WHERE C.CustomerID = O.CustomerID
      ORDER BY OrderDate Desc, OrderID Desc
   ) X

如果要从Customers表中提取任何列,这可能会使的性能优于其他方法

如果没有,那么Row_Number的回答,只从订单中提取,可能是最好的。但是,如果您以任何方式限制客户,那么CROSS APPLY将再次是最好的。可能有很大的差距。

票数 3
EN

Stack Overflow用户

发布于 2011-01-22 17:54:32

诀窍是将子查询用作值,而不是连接:

代码语言:javascript
复制
select customerId,orderDate,locationId
  from orders o1
 where orderDate = (
           select top 1 orderdate
             from orders o2
            where o1.customerId = o2.customerId
            order by orderdate desc
       )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4769491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档