履歴データを表す2つのテーブルがあり、どちらにもそのデータのプライマリテーブルの主キーを表す「src」列があります。
例えば
プライマリテーブルは
tbl_user tbl_email
________ _________
user_pk email_pk
username email
email_pk tstamp
tstamp
履歴テーブルは基本的に、元のテーブルと、プライマリテーブルのソースプライマリキーレコードを示す「src」列と一致します。
tbl_user_hist tbl_email_hist
______________ ______________
user_pk email_pk
src_user_pk src_email_pk
username email
email_pk tstamp
tstamp
したがって、主キー1の電子メールレコードがあり、電子メールをbob@gmail.comからbob@hotmail.comに変更し、次に再びbob@yahoo.comに変更した場合
あなたのtbl_email_histはこのようになります
email_pk src_email_pk email tstamp
1 1 bob@gmail.com 2012-01-01 04:06:28
2 1 bob@hotmail.com 2012-03-01 04:06:28
3 1 bob@yahoo.com 2012-07-01 04:06:28
そして、bobsの元のユーザー名がrsmithであり、その後bsmithに変更され、次にrsmith2に戻ったとしましょう。ただし、これらのユーザー名の変更は、電子メールの変更のタイムスタンプと必ずしも一致しません。
同様に、ユーザー履歴テーブルは次のようになります。
tbl_user_hist
User_pk src_user_pk username email_pk tstamp
1 1 rsmith 1 2012-01-01 04:08:28
2 1 bsmith 1 2012-02-01 04:01:28
3 1 rsmith2 1 2012-05-01 04:05:28
だから私が欲しいのは、タイムスタンプと関連するemail_pkレコードに基づいて正しい電子メール履歴レコードを見つけることができるクエリを作成することです...ユーザーレコードが変更されたときのそのフィールドの値を意味します。したがって、何らかの方法で、src_email_pkがユーザー履歴テーブルのemail_pkと一致する電子メール履歴テーブルのレコードを見つける必要がありますが、その電子メール履歴レコードのスタンプは、ユーザーテーブルのタイムスタンプ未満であるにもかかわらず最高の日付です。
結局、私のデータは次のようになります
Username email username_timestamp
Rsmith bob@gmail.com 2012-01-01 04:08:28
Bsmith bob@hotmail.com 2012-02-01 04:01:28
Rsmith2 bob@hotmail.com 2012-05-01 04:05:28
つまり、ユーザー名レコードが変更/作成されたときの電子メール列の値を反映しています。