2

編集:私はSQLServerを使用しています

この例を探しましたが、何も見つからなかったので、新しいスレッドを開始します...

私は3つのテーブルを持っています。

アカウント

  • アカウントID
  • ファーストネーム
  • 苗字

AccountEnroll

  • AccountEnrollID
  • アカウントID
  • AccountTypeID
  • EnrollDate

口座の種類

  • AccountTypeID
  • 口座の種類

AccountEnrollテーブルは、各顧客の登録履歴を追跡するためのブリッジテーブルです。「EnrollDate」列を使用して、各顧客の現在のアカウントタイプを確認したいと思います。AccountID、FirstName、LastName、(current)AccountTypeを表示できるSELECTステートメントを作成する必要があります。

結果セットに各顧客のMAX(EnrollDate)レコードのみを表示させるのに問題があります。

4

3 に答える 3

4

一般的なテーブル式を使用して、これを非常に簡単に行うことができます。

with cte as (

select A.FirstName, A.LastName, AT.AccountType, AE.EnrollDate, row_number() over (partition by AE.AccountID order by EnrollDate desc) as [rn]
from Account as A
inner join AccountEnrolled as AE
   on A.AccountId = AE.AccountId
inner join AccountType as AT
   on AE.AccountTypeId = AT.AccountTypeId

)
select FirstName, LastName, AccountType, EnrollDate
from cte
where rn = 1
于 2012-10-07T16:16:31.047 に答える
2

これを試して:

SELECT 
  a.AccountID, a.FirstName, a.LastName, 
  at.AccountType AS 'Current AccountType'
FROM Account a
INNER JOIN
(
   SELECT AccountID, MAX(EnrollDate) MaxDate
   FROM AccountEnroll
   GROUP BY AccountID
) t
INNER JOIN AccountEnroll ae ON  ae.AccountID = t.AccountID 
                            AND ae.EnrollDate = t.MaxDate
INNER JOIN AccountType at ON ae.AccountTypeID = at.AccountTypeID
于 2012-10-07T15:45:21.210 に答える
0

相関サブクエリを使用できます。

SELECT A.AccountId, A.FirstName, A.LastName, AT.AccountType
FROM Account A
JOIN AccountEnroll AE
    ON A.AccountId = AE.AccountId
JOIN AccountType AT
    ON AE.AccountTypeId = AT.AccountTypeId
WHERE NOT EXISTS (
    SELECT 1
    FROM AccountEnroll
    WHERE AccountId = AE.AccountId
        AND EnrollDate > AE.EnrollDate
) 
于 2012-10-07T17:11:50.310 に答える