指定された時間範囲内にある特定の列に基づいてテーブルを結合しようとしています。私はいくつかの方法を試しましたが、これを解決することができませんでした。
私は簡単なクエリから始めます:
SELECT *
FROM admin.mktdmtunit c
WHERE c.unitid IN ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
AND to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
1行を返します。
次に、別のテーブルを追加します。
SELECT *
FROM admin.mktdmtunit c
INNER JOIN admin.mktmanualdispatch_all mrd
ON c.unitid = mrd.unitid
where c.unitid in ('2756')
AND (c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
OR mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss'))
これは、そのunitidのmrdテーブルの4つのエントリに基づいて4行を返します。しかし、これらのどれもその日付に関連していないので、私はその情報を見たくありません。
だから私はこれを試しました:
SELECT *
FROM admin.mktdmtunit c
where c.unitid in ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
OR (exists(SELECT mrd.effectivetime
FROM admin.mktmanualdispatch_all mrd
WHERE mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
AND c.unitid = mrd.unitid)
ただし、これにより、最後の行の「mrd.unitid」の前に「、」が必要であるというエラーが発生します。
だから私もこれを試しました:
SELECT *
FROM admin.mktdmtunit c
INNER JOIN admin.mktmanualdispatch_all mrd
ON
mrd.effectivetime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
AND c.unitid = mrd.unitid
where c.unitid in ('2756')
AND c.calledofftime between to_timestamp('2012-12-05 05:00:01','yyyy-mm-dd hh:mi:ss')
and to_timestamp('2012-12-06 05:00:00','yyyy-mm-dd hh:mi:ss')
しかし、これは行を返しません。
明確にするために、この特定のクエリに必要なのは、c.calledofftimeに基づく情報があり、mrd.effective timeに基づく関連データがないため、他のテーブルから情報が取得されない1行です。ありがとう