2016-10-20 4 views
-2

Oracle sqlを使用して、次の表から最新の終了日を持つ一意の名前を抽出する方法を教えてください。各名前の最後の行を取得するには?

NAME Start DATE End Date 
ATO210291676 21/11/2015 18/05/2016 
ATO210291676 19/05/2016 30/06/2017 
ATO210291889 21/11/2015 18/05/2016 
ATO210291889 19/05/2016 30/06/2017 
ATO210291923 21/11/2015 18/05/2016 
ATO210291923 19/05/2016 30/06/2017 
ATO210186276 25/05/2015 24/05/2016 
ATO210186276 25/05/2016 30/06/2017 
ATO210186373 25/05/2015 24/05/2016 
ATO210186373 25/05/2016 30/06/2017 
TNT212498119 29/06/2015 28/06/2016 
TNT212498119 29/06/2016 30/06/2017 
TNT212498349 26/02/2016 30/06/2017 
ATO212491256 26/02/2016 30/06/2017 
ATO212502235 26/02/2016 30/06/2017 
ATO212522556 26/02/2016 30/06/2017 
ATO212522582 26/02/2016 30/06/2017 
CVE114AK0076 16/09/2015 26/06/2016 
CVE114AK0076 27/06/2016 30/06/2017 
CVE414AK0012 15/09/2015 26/06/2016 
CVE414AK0012 27/06/2016 30/06/2017 

私は、次のような結果を生成しようとしています。

ATO210291676 19/05/2016 30/06/2017 
 
ATO210291889 19/05/2016 30/06/2017 
 
ATO210291923 19/05/2016 30/06/2017 
 
ATO210186276 25/05/2016 30/06/2017 
 
ATO210186373 25/05/2016 30/06/2017 
 
TNT212498119 29/06/2016 30/06/2017 
 
TNT212498349 26/02/2016 30/06/2017 
 
ATO212491256 26/02/2016 30/06/2017 
 
ATO212502235 26/02/2016 30/06/2017 
 
ATO212522556 26/02/2016 30/06/2017 
 
ATO212522582 26/02/2016 30/06/2017 
 
CVE114AK0076 27/06/2016 30/06/2017 
 
CVE414AK0012 27/06/2016 30/06/2017

結果セットは、あなたが最新の日付を取得するにはmax機能を使用することができます

答えて

0
select  NAME 
      ,"Start DATE" 
      ,"End Date"   

from  (select  t.* 
         ,row_number() over (partition by NAME order by "End Date" desc) as rn 

      from  t 
      ) t 

where  rn = 1 
; 
+0

私はこれを使用しており、チャームのように動作します。 –

+0

@DilanPerera、P。あなたが答えが好きなら、あなたはアップホートしたいかもしれません –

0
SELECT NAME, MAX(ENDDate) 
from tab 
GROUP BY NAME 

上のようにする必要があります。

0
SELECT Name, StartDate, EndDate 
FROM [Your_Table] A 
INNER JOIN 
(
    SELECT Name, MAX(EndDate) AS MaxEndDate 
    FROM [YOUR_TABLE] 
    GROUP BY Name 
) B ON A.Name = B.Name AND A.EndDate = B.EndDate 
0

あなたは結合やサブクエリせず、1回のパスで望ましい結果を得ることができます。これがスピードの向上に結びつくかどうかは、実際のデータでさまざまなソリューションを試して判断することです。

select name, 
     max(start_date) keep (dense_rank last order by end_date) as start_date, 
     max(end_date) as end_date 
from  table_name 
group by name 
; 
関連する問題