每个ID只有一行,价值最高

时间:2015-02-25 00:21:07

标签: sql sql-server sql-server-2000

我有一个查询

SELECT 
    * 
FROM 
    mgr.MF_AGREEMENT_LGR TABLE1
INNER JOIN 
    (SELECT 
        MAX(VALUE_DATE) AS VALUE_DATE, 
        REGISTRATION_NO AS REGISTRATION_NO 
     FROM 
        mgr.MF_AGREEMENT_LGR 
     GROUP BY 
        REGISTRATION_NO) AS TABLE2 ON TABLE1.REGISTRATION_NO = TABLE2.REGISTRATION_NO
WHERE 
    TABLE1.VALUE_DATE = TABLE2.VALUE_DATE 
    AND TABLE1.TRX_CODE = 'LCLR'
ORDER BY 
    TABLE1.REGISTRATION_NO

这将返回每个REGISTRATION_CODE的最新日期行。有些人对每个REGISTRATION_CODE都有三个或更多结果,因为它在同一天有多个交易。

此外,每行都有DOC_NO字段。

我的问题是,如何从REGISTRATION_CODE DOC_NO获得最高DOC_NO的每一行。

顺便说一句,Amort 1, Amort 12, Amort 5是一个varchar。

此字段的示例值为:REGISTRATION_CODE

如果这些示例位于一个{{1}}中,我只需要具有最高amort的行,即Amort 12。

我正在使用SQL Server 2000。

1 个答案:

答案 0 :(得分:2)

不支持SQL Server 2000。你真的应该升级到支持的软件。

您可以使用not exists获得所需内容:

SELECT al.*
FROM mgr.MF_AGREEMENT_LGR al
WHERE NOT EXISTS (SELECT 1
                  FROM mgr.MF_AGREEMENT_LGR al2
                  WHERE al2.registration_no = al.registration_no and
                        (al2.date > al2.date or
                         al2.date = al.date and al2.DOC_NO > al.DOC_NO
                        )
                 ) AND
      al.TRX_CODE = 'LCLR';

您可能也希望子查询中的'LCLR'条件。但是,这不在原始查询中,所以我将其遗漏。