0

複数のトランザクションのテーブルがあります。最後のトランザクションの行を取得しようとしています。私は以下を使用しています:

select n.AccountNumber, max(PostDate), f.TransAmt 
from mp_cycle n, fintrans f
where n.AccountNumber = f.AccountNumber
and TransCode >= '50'
and TransCode <= '59'
group by n.AccountNumber

これは特定のアカウントの最終日付を返していますが、TransAmt は同じレコードのものではありません。

すなわち:

Acct #  Date   Amt
1       1/1    10.00
1       1/2    11.00
1       1/3    12.00
2       1/2    20.00
2       1/3    21.00
2       1/4    22.00

私の選択では、各アカウントの最終日が返されるため、行為 # 1 では 1/3、行為 # 2 では 1/4 になりますが、Amt フィールドはそのレコードに対応する金額ではありません。

どんな援助でも大歓迎です。

4

1 に答える 1

1

この問題を解決するには多くの方法があります。1 つは、PostDateすべての最新情報を取得する追加のサブクエリを結合することAccountNumberです。サブクエリの結果は、次の 2 つの列で一致する必要がある場合、他のテーブルで結合されます:AccountNumberPostDate.

SELECT  a.*, b.*
FROM    mp_cycle a
        INNER JOIN fintrans b
            ON a.AccountNumber = b.AccountNumber
        INNER JOIN
        (
            SELECT  AccountNumber, MAX(PostDate) max_date
            FROM    fintrans 
            GROUP   BY AccountNumber
        ) c ON  b.AccountNumber = c.AccountNumber AND
                b.PostDate = c.max_date
-- WHERE    ..your conditions here..
于 2013-05-01T15:57:26.013 に答える