2016-07-25 12 views
0

以下に示すような単純なコードを実行しようとしています。SQL - 日付に基づいて、最新の従業員情報を選択します。

SELECT MR.ID_NUMBER 
, MR.LAST_NAME 
, MR.FIRST_NAME 
, MR.EMAIL_ADDRESS 
, MR.ASSIGNMENT_STATUS 
, MR.assignment_start_Date 
, AD.Address_line1 
, AD.Town_Or_City 



FROM Master_Rv MR 
, Address_Details_v AD 


WHERE Last_Name = 'Test' 
and AD.Person_ID = MR.PERSON_ID 

このコードを実行すると、複数の行のデータが生成されます。可能であれば、最新の「Assignment_Start_Date」でデータを取得したいだけですか?私はそれが理にかなったことを願う

私は研究をしましたが、私の頭をかきたてることができないので、なぜここで尋ねたのですか?ありがとうございます。

+1

あなたはby' 'グループといくつかの' MAX(MR.assignment_start_Date) ' – valentin

+0

こんにちは@valentinを使用する必要があります。どういう意味ですか? –

+0

複数の行に同じ "Assignment_Start_Date"がある場合どの列が必要ですか? –

答えて

2

まず、適切な明示的なJOINの構文を使用する方法を学んでください。単純なルール:は、FROM句のカンマを使用します。 常に明示的なJOIN構文を使用してください。

あなたの質問への最も簡単な答えは、ROW_NUMBER()を使用することです:

SELECT MR.ID_NUMBER, MR.LAST_NAME, MR.FIRST_NAME, 
     MR.EMAIL_ADDRESS, MR.ASSIGNMENT_STATUS, MR.assignment_start_Date, 
     AD.Address_line1, AD.Town_Or_City 
FROM Master_Rv MR JOIN 
    (SELECT ad.*, 
      ROW_NUMBER() OVER (PARTITION BY Person_ID ORDER BY Assignment_Start_Date DESC) as seqnum 
     FROM Address_Details_v AD 
    ) AD 
    ON AD.Person_ID = MR.Person_ID 
WHERE MR.Last_Name = 'Test' AND seqnum = 1; 
+0

こんにちはGordon、私はあなたが上に投稿したものを実行しようとしましたが、次のエラーメッセージ 'FROM keyword not expected'が表示されるようです。そして、私はこれが「DESC as seqnum」を参照しているようだと思います。なぜこれが分かっていますか? 私は完全なアマチュアのように聞こえる場合は謝罪、私はこれに非常に新しいです! –

+1

@Chris_Finnerty 'DESC'の後に ')'を移動 – Mottor

+0

Descの後に)移動しても、まだ問題があります。これは、私がテーブルの代わりにビューを使用しているという事実のためでしょうか? @Mottor –

0
SELECT MR.ID_NUMBER 
, MR.LAST_NAME 
, MR.FIRST_NAME 
, MR.EMAIL_ADDRESS 
, MR.ASSIGNMENT_STATUS 
, MR.assignment_start_Date 
, AD.Address_line1 
, AD.Town_Or_City 



FROM Master_Rv MR 
, Address_Details_v AD 


WHERE Last_Name = 'Test' 
and AD.Person_ID = MR.PERSON_ID 
ORDER BY MR.assignment_start_Date DESC 
LIMIT 10; 

これは、最新のassignment_start_Dateにあなたの記録を注文すると10の最新のデータ、 にあなたの行を制限しますが、あなたはのためにJOINを使用する必要があります"FROM"の代わりに有効なコード

+2

これはOracleです。ここでの制限句は、「FETCH FIRST 10 ROWS ONLY」であり、上記のOracle 12.1からのみ存在します。 – Mottor

0

サブ選択では、同じperson_idを持つ人物の最大割り当て開始日が取得され、このレコードのみを取得するために使用されます。

SELECT MR.ID_NUMBER 
, MR.LAST_NAME 
, MR.FIRST_NAME 
, MR.EMAIL_ADDRESS 
, MR.ASSIGNMENT_STATUS 
, MR.assignment_start_Date 
, AD.Address_line1 
, AD.Town_Or_City 
FROM Master_Rv MR 
, Address_Details_v AD 
WHERE mr.Last_Name = 'Test' 
and MR.assignment_start_Date = (select max(assignment_start_Date) from Master_Rv where person_id=mr.person_id) 
and AD.Person_ID = MR.PERSON_ID 
関連する問題