最初の行は内部結合からのみ戻したいと考えています。私は2つのテーブルを持っています:INNER JOINの単一行を返す
TABLE_DとTABLE_Eの行は同じ作成日を持つことができますので、最初にこのセットからMAX(creationdate)を取得してからMAX(id)を取得しています。
SELECT
a.id as A_ID,
b.id as B_ID,
c.id as C_ID,
d.id as D_ID,
e.id as E_ID,
d.CREATIONDATE,
a.REFNUMBER,
a.DATECREATED,
a.INFO,
e.COST,
FROM
TABLE_A a
INNER JOIN TABLE_B b ON (b.id = a.id)
INNER JOIN TABLE_C c ON (c.id = b.id)
INNER JOIN TABLE_D d ON
(
c.i =
(
select
d.id
FROM TABLE_D
WHERE TABLE_D.id = c.id
AND TABLE_D.id =
(
select
max(id)
from TABLE_D t1
where c_id = c.id
and CREATIONDATE =
(
select
max(CREATIONDATE)
from TABLE_D t2
where t2.c_id = t1.c_id
)
)
)
)
INNER JOIN TABLE_E e ON
(
d.i =
(
select
e.d_id
from TABLE_E
where d_id = d.id
AND id =
(
select
max(id)
from e t1
where e.d_id = d.id
and CREATIONDATE =
(
select
max(CREATIONDATE)
from TABLE_E t2
where t2.d_id = t1.d_id
)
)
)
)
最大のCreationDateととmax idが、私はそれ自身でそれを呼び出したときに正常に動作しますが、私はINNERに追加するとき、JOINことからすべての行を取得するために私のサブクエリを(参照:ここでは私の完全なクエリです私はテーブルDとテーブルEの各一致する行の行を取得しています。私がしたいのは、TABLE_Cに関連付けられたTABLE_Dの最新行とTABLE_Dに関連付けられたTABLE_Eの最新の行だけを表示するTABLE_A.idごとに1つの行です。
は例えば、私の結果セット内のidのは、現時点では次のようになります。あなたの助けを事前に
--------------------------------------------------------------------------
A_ID B_ID C_ID D_ID E_ID
--------------------------------------------------------------------------
1 101 201 302 406
ありがとう:私は必要なのこれです
--------------------------------------------------------------------------
A_ID B_ID C_ID D_ID E_ID
--------------------------------------------------------------------------
1 101 201 301 401
1 101 201 301 402
1 101 201 301 403
1 101 201 302 404
1 101 201 302 405
1 101 201 302 406
。
。私は、各A_IDに最新のD_IDとE_IDが必要であることを示すために、私の例に1つの結果を入れました。しかし、ありがとう。 – adamdunne