2017-04-08 11 views
0

私はAdventureworks2012データベースでSQLを学習しています。SQL文のヘルプ要求

私は、昇給を受けたすべての従業員を見つけるためにクエリを作成しようとしています。 私が得た結果の最初の6行は次のとおりです。

最初の列は、businessentityidと引き上げ日です。以下の文で

BID Salary Raise Date 
4 05.01.2002 00:00:00 
4 01.07.2004 00:00:00 
4 15.01.2006 00:00:00 
16 20.01.2002 00:00:00 
16 16.08.2003 00:00:00 
16 01.06.2006 00:00:00 

select 
    RateChangeDate, Rate, BusinessEntityID 
from 
    HumanResources.EmployeePayHistory 
where 
    BusinessEntityID in (select BusinessEntityID 
         from HumanResources.EmployeePayHistory 
         group by BusinessEntityID 
         having count (*) > 1); 

人が昇給を雇わなくてしまったときに今、私がやりたいものをそれが最初の給料であるとして、それぞれの結果のための最初の行を削除することです。

この表にある唯一の余分な列は、各日付の料金を表示するRateです。

enter image description here

画像は、上記のステートメントに追加レートの列です。

感謝:)

答えて

1

あなたはすべてが、従業員のための最初の給料をしたい場合は、あなたはウィンドウ関数を使用する方法を学ぶ必要があります。あなたがSQLを学んでいるなら、非常に強力で有用なので、すぐにそれらを学ぶことをお勧めします。

select RateChangeDate, Rate, BusinessEntityID 
from (select eph.*, 
      row_number() over (partition by BusinessEntityID order by RateChangeDate desc) as seqnum 
     from HumanResources.EmployeePayHistory eph 
    ) eph 
where seqnum > 1; 

あなたは、SQL Serverのドキュメントでは約row_number()を読むことができます:

あなたはROW_NUMBER()を使用してやりたいです。