我有一个查询
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。
答案 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'
条件。但是,这不在原始查询中,所以我将其遗漏。