次の状況があります(簡略化):
2 つの BiTemp テーブル
- 基本データ (id、btmp_tsd、名前、プレネーム)
- 拡張データ (id、btmp_tsd、basicid、コードネーム、コード値)
拡張データでは、1 つの基本データに対して、それぞれ異なるコードネームと値を持つ複数のエントリが存在する可能性があります。
指定した時間以降に変更されたすべての行を選択する SQL を作成する必要があります。basicdata テーブルの場合、これは比較的単純です。
SELECT ID, BTMP_TSD, NAME, PRENAME
FROM BASICDATA BD
WHERE BTMP_TSD =
(SELECT MAX(BTMP_TSD)
FROM BASICDATA BD2
WHERE BD2.ID = BD.PRTNR_ID
AND BD2.BTMP_TSD > :MINTSD
AND BD2.BTMP_TSD <= :MAXTSD
)
ORDER BY ID
WITH UR
ここで、コードネーム「test」のコード値を取得するために、2 番目のテーブルに参加する必要があります。問題は、存在しない可能性があることです。この場合、とにかく行を収集する必要があります。しかし、行はあるが時間範囲内にない場合、結果は得られません。
私の問題を説明できたことを願っています。結合は、私がまだ見抜けていないものの1つです...
編集:さて、ここにサンプルがあります
basicdata:
id,btmp_tsd,name,prename
1,2013-05-25,test,user
2,2013-06-26,user,two
3,2013-06-26,peter,hans
1,2013-06-20,test,us3r
2,2013-10-30,us3r,two
extendeddata:
id,btmp_tsd,basicid,codename,codevalue
1,2013-05-25,1,superadmin,1
2,2013-06-26,3,admin,1
3,2013-11-25,1,superadmin,0
さて、これらのエントリを取得しました。2013年 10 月 1 日以降に変更されたすべてのユーザー IDを取得する必要があります。
User1 (extendeddata スーパー管理者が変更されたため)
ユーザー 2 (名前が変更されたので、拡張データ テーブルにエントリがないことを強く望んでいます)
User3 ではありません (彼は両方のテーブルにエントリを持っていますが、指定された範囲にありません)