sql - 找到一个字段的值与另一字段中数据的最大值匹配

标签 sql sql-server sql-server-2005 aggregate

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

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 关联的 LocationID

最终的数据集应如下所示:

CustomerID  OrderDate   LocationID      
4           1/3/2001    1001
5           1/8/2001    1002

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

最佳答案

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;

关于sql - 找到一个字段的值与另一字段中数据的最大值匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4769491/

相关文章:

sql - Mysql - 在所有数据库中查找表

sql - 带分组的案例陈述

sql - 使用 Query 在 SQL Server 中查找所有使用游标的存储过程

sql-server - SQL 返回特定年份以来的年份列表

mysql - 在 SQL 中,如何输出对多个列执行函数的列?

sql - 在有条件的多对多表中执行左连接

mysql - 尝试输入多个表时数据丢失(讨论)

sql - 如何使用/VBA绕过 "Select Data Source"查询表提示

sql-server - 客户端排序规则和 SQL Server 2005

sql-server - 确定哪个用户删除了 SQL Server 数据库?