2017-06-24 10 views
-1

の列の値に基づいて、SQLで最大または最小の日付を取得は、私は、SQLクエリといくつかの助けを必要とするSQL

Emp_Id, Emp_Name, Dept_Id, Join_Date, Salary 
1, John, A, 20170101, 50000 
2, David, B, 20160201, 60000 
1, John, A, 20170606, 60000 

従業員の場合部門Aに属し、最新の給与は何ですか?従業員がDept Bにある場合、最も早い給与は何ですか?

はこのような何かをやってみましたが、

+1

これらの試験問題は、見知らぬ人と見知らぬ人を得ているの助けに感謝従業員が1以上のdept

select salary,emp_id,join_date from employee where emp_id in (select emp_id from employee where dept = 'A') group by emp_id having join_date = max(join_date) union select salary,emp_id,join_date from employee where emp_id in (select emp_id from employee where dept != 'A') group by emp_id having join_date = min(join_date) 

をしている場合にはリターンの重複を動作しません。 。言ってるだけ'。私はそれがどのように成功したかを示していると思います。この地域社会と教授との間には武器競争があり、cut'n'paste-proofの質問が出てきます。 –

+0

ステートメントの列名がテーブル内の列名と異なる '最新の給与'とは何ですか?あなたは最近入会した人の給料を参考にしていますか? "dpt!= 'A'"があなたのケースでは機能するかもしれませんが、department = Bの行からだけ戻ってくる場合は "dept = 'B'"を使用してください 投稿する前に、それらのSO! –

答えて

0
SELECT Salary, Emp_Id, Emp_Name, Dept_Id, Join_Date 
    FROM employee 
WHERE Dept_Id = 'A' 
    AND Join_Date = (SELECT MAX(Join_Date) 
         FROM employee 
         WHERE Dept_Id = 'A' 
        ) 
UNION ALL 
SELECT Salary, Emp_Id, Emp_Name, Dept_Id, Join_Date 
    FROM employee 
WHERE Dept_Id = 'B' 
    AND Join_Date = (SELECT MIN(Join_Date) 
         FROM employee 
         WHERE Dept_Id = 'B' 
        ) 
関連する問題