0

次の状況があります(簡略化):

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 ではありません (彼は両方のテーブルにエントリを持っていますが、指定された範囲にありません)

4

1 に答える 1

0

次のクエリは、必要なことを行う必要があります。

select * 
from basicdata b left outer join extendeddata e on b.id=e.basicid
where b.btmp_tsd >= '2013-10-01'
  or e.btmp_tsd >= '2013-10-01'

免責事項:私はSQLをテストしませんでした。したがって、構文は 100% 完璧ではない可能性があります。

于 2013-11-27T14:02:31.720 に答える