sql - 为每个用户选择最大记录

标签 sql sql-server subquery

这似乎应该相当简单,但我在尝试找到适合我的解决方案时遇到了困难。

我有一个 member_contracts 表,其结构如下(简化)。

MemberID | ContractID   | StartDate | End Date |
------------------------------------------------
1          1              2/1/2002    2/1/2003
2          2              3/1/2002    3/1/2003
3          3              4/1/2002    4/1/2003
1          4              2/1/2002    2/1/2004
2          5              3/1/2003    2/1/2004
3          6              4/1/2003    2/1/2004

我正在尝试创建一个查询,从此表中选择最新的契约(Contract)。这是这个小示例的以下输出:

MemberID | ContractID   | StartDate | End Date |
------------------------------------------------
1          4              2/1/2002    2/1/2004
2          5              3/1/2003    2/1/2004
3          6              4/1/2003    2/1/2004

在每个用户的基础上执行此操作非常简单,因为我只需使用子查询即可为指定用户选择最大contractID。我正在使用 SQL Server,因此如果有一种特殊的方法可以实现这种风格,我愿意使用它。就我个人而言,我想要一些与引擎无关的东西。

但是,我该如何编写一个查询来实现所有用户的目标呢?

编辑:我还应该补充一点,我正在寻找每个用户的最大contractID 值,而不是最近的日期。

最佳答案

此解决方案使用 ContractId 字段的唯一性:

SELECT MemberID, ContractID, StartDate, EndDate
FROM member_contracts 
WHERE ContractId IN (
    SELECT MAX(ContractId)
    FROM member_contracts 
    GROUP BY MemberId
)

查看它在线运行:sqlfiddle

关于sql - 为每个用户选择最大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203521/

相关文章:

mysql - 最优二元线性回归计算

c# - 动态创建.mdf/.sdf 数据库

mySQL 从计算值返回不同的行

mysql - 如何让它工作 "SELECT COUNT(x) AS amount ... WHERE amount > 0"?

sql - 是否可以在不循环的情况下比较 T-SQL 中的逗号分隔字符串?

c# - SQL 强制应用程序加密连接

sql - 如何在sql中进行join时保持顺序

c# - Asp.net C# SQL Server 更新查询不适用于所有列

mysql - 停留在如何执行特定查询上

MySQL:在另一个子查询中使用子查询结果