2016-04-19 13 views
0

私はSQLの初心者ですが、これは私が考えることができるよりずっと簡単です。 私は、テーブルの最新のレコードを取得し、最新のレコードをステータス別に数えます。いくつかの能力がステータスと月/年で数を返すOracle SQL Developer Query - 最新のレコードを選択し、別の列で数える

would be a bonus. 
So table is the following: 
ID  STATUS  TIMESTAMP 
1  ACTIVE  04/19/2016 
1  PENDING 04/18/2016 
2  ACTIVE  04/08/2016 
2  PENDING 04/01/2016 
3  PENDING 04/07/2016 
4  PENDING 12/01/2015 
5  CANCELLED 12/30/2015 

私は私が望んでいたクエリを実行すると、以下:私は、次を使用して、最新のレコードを取得することができています

ACTIVE 04/2016 2 
PENDING 04/2016 1 
CANCELLED 12/2015 1 

Select id, 
    status, 
    date from (
Select TABLE_A, 
    status, 
    date, 
    row_number() over (partition by id order by date Desc) col 
From TABLE_A) ps 
Where ps.col = 1; 

ご利用いただきありがとうございます。

答えて

0

ほとんどの方法があります。残りはちょうど集計です:

select status, to_char(date, 'YYYY-MM') as yyyymm, count(*) 
from (Select TABLE_A, status, date, 
      row_number() over (partition by id order by date Desc) as seqnum 
     From TABLE_A 
    ) ps 
Where seqnum = 1 
group by select status, to_char(date, 'YYYY-MM') ; 
+0

これは素晴らしいです。私の特定のシナリオでは、ちょうどそれを微調整しなければなりませんでしたが、これはとても助けになりました。私の変更は以下の通りです ステータスを選択すると、to_char(status_date、 'YYYY-MM')はYYYYMM、count(*) から(状態、日付、)(se_number 〜からfrom TABLE_A )ps ここで、seqnum = 1 ステータス別のグループ、to_char(date、 'YYYY') 2 asc、1 ascの順。 – Mlover

関連する問題