2016-10-01 7 views
1

を取得し、私はこのFirebirdのクエリを作成する必要がある2つのテーブルを結合し、第二のテーブルからのみ最新のエントリに

を助けてください、私は2つのテーブルがあります。

表1:CLIENT

ID, NAME, TEL, ADRESS, EMAIL 

TABLEを2:CRM_INTERACTIONS

ID, CLIENT_ID, DATE, INTERACTION_TYPE 

私はクライアントテーブルのすべてのフィールドとtablの2つのカラムを取得する必要がありますE 2のとおりです。そのクライアントのための最後のinteraction_type プラス日付はそうビューは次のようになります。

ID, NAME, TEL, ADRESS, EMAIL, DATE_OF_LAST_INTERACTION, INTERACTION_TYPE 

1, JOHN, 555555,1TH ST, [email protected], 01/10/2016, phone call 

答えて

1

私はFirebirdの3+はrow_number()を持っていると思うので、あなたが行うことができます:

select c.*, ci.* 
from client c left join 
    (select ci.*, 
      row_number() over (partition by client_id order by date desc) as seqnum 
     from crm_interactions ci 
    ) ci 
    on c.id = ci.client_id and seqnum = 1; 

以前のバージョンでは、従来のSQLを使用してこれを行いました。ここでは一つの方法である:

select c.*, ci.* 
from client c left join 
    crm_interactions ci 
    on c.id = ci.client_id left join 
    (select ci.client_id, max(date) as maxdate 
     from crm_interactions ci 
     group by ci.client_id 
    ) cci 
    on ci.client_id = cci.client_id and ci.date = cci.maxdate; 
+0

私はそれをテストし、それはほとんどproblemaを解決するため、一つだけ問題:この方法は、それだけですべてのクライアントは、CIテーブル内の値を持つ相互作用をクライアントに表示されませんが、それを残します。また、左結合を使用して両方の結合を置き換えましたが、クライアントレコードを複製します。何か案が? – Carlos

関連する問題