2012-05-11 3 views
0

私はmysqlを使用しています。アカウント情報を持つテーブルAと、生年月日、住所、保険ポリシー情報(プライマリ、セカンダリ)などの人口統計情報を持つBテーブルがあります。テーブルBの保険feildsが更新されているので、私はテーブルB.Table Bからの最新のデータがほしいと思っています。だから、後でAと結合するBからの最新のレコードをどのように取得するのですか?left joinの最新のレコード

select 
    A.num, 
    A.openingamount, 
    A.action, 
    A.current_status, 
    B.dob, 
    B.primary_policy, 
    B.secondary_policy 
from A 
left outer join B 
    on (B.uniqueid = A.ponum) 
where A.num ='123' 
+1

表Bに自動インクリメント列がありますか?日付がなく、数字が増えていない場合は、最新の行を見つけることはできません。 –

+0

自動増分はありません。#tは何を意味していますか?詳しく教えてください。 – sweety

+0

増分列は、新しいレコードが自動的に最高のIDを取得することを意味します。最後のレコードがid3の場合、新しいレコードはID4を持ちます。 –

答えて

0

日付列を持っていない場合、あなたはインクリメント列が必要です。

select 
    A.num, 
    A.openingamount, 
    A.action, 
    A.current_status, 
    B.dob, 
    B.primary_policy, 
    B.secondary_policy 
from A 
left outer join B 
    on (B.uniqueid = A.ponum) 
where A.num ='123' 
order by B.increment_id desc 
0

をまた、自動更新TIMESTAMPフィールドを追加することができます -

ALTER TABLE B 
    ADD COLUMN ts 
    TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; 

Automatic Initialization and Updating for TIMESTAMP

このフィールドを使用して、最新のレコードを検索します。

0

ユルゲンdは、あなたが最新であるかを決定するために、テーブルBに一部注文した列を必要とすることを示す、上記のEIRのコメントで正しいです。 B.uniqueidが自動インクリメント列の場合は、それを使用できます。それ以外の場合は、注文する新しい列を追加する必要があります。

次に、2番目の結合を使用してBの行を見つけるためにBにダブルジョインでデータを取得できます最大値uniqueidより大きい(つまり、はありません。)。

SELECT 
    A.num, A.openingamount, A.action, A.current_status, 
    B.dob, B.primary_policy, B.secondary_policy 
FROM A 
    LEFT JOIN B ON (B.a_ponum = A.ponum) 
    LEFT JOIN B2 ON (B2.a_ponum = A.ponum AND B2.uniqueid > B.uniqueid) 
WHERE 
    B2.uniqueid IS NULL 
    AND A.num ='123'