2017-06-14 14 views
0

私は多くのソリューションを試してみましたが、何も動作していないようです。私は、プロジェクトのMAXステータス日付を返そうとしています。そのプロジェクトに同じ日付のアイテムが複数ある場合は、MAX IDを返す必要があります。これまでのところ、私はこれを試してみました:複数の行から返されるSQLの最大値

SELECT PRJSTAT_ID, PRJSTAT_PRJA_ID, PRJSTAT_STATUS, PRJSTAT_DATE 
From Project_Status 
JOIN 
(SELECT MAX(PRJSTAT_PRJA_ID) as MaxID, MAX(PRJSTAT_DATE) as MaxDate 
FROM Project_Status 
Group by PRJSTAT_PRJA_ID) 
On 
PRJSTAT_PRJA_ID = MaxID and PRJSTAT_DATE = MaxDate 
Order by PRJSTAT_PRJA_ID 

それは次の値を返します。

Results

私はPRJSTAT_PRJA_IDための複数のレコードを取得していますが、私は唯一のMAX PRJSTAT_IDで行を返すようにしたいです。何かご意見は?

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-imagesをお読みください質問の際のコード・オン・ザ・コード/ 285557と受け入れられた回答 –

+0

私はOracleを使用しています。 – hkimberlin

+0

イメージは残念です。私は将来それらを使用しないことを確認します。 – hkimberlin

答えて

0

は、サブクエリのIDでMAXを取り出し:

SELECT PRJSTAT_ID, PRJSTAT_PRJA_ID, PRJSTAT_STATUS, PRJSTAT_DATE 
From Project_Status 
JOIN 
(SELECT PRJSTAT_PRJA_ID as ID, MAX(PRJSTAT_DATE) as MaxDate 
FROM Project_Status 
Group by PRJSTAT_PRJA_ID) 
On 
PRJSTAT_PRJA_ID = ID and PRJSTAT_DATE = MaxDate 
Order by PRJSTAT_PRJA_ID 
+0

まだ重複する行があります。 – hkimberlin

0

または結合する必要性を取り除く:

SELECT * FROM  
(SELECT PRJSTAT_ID, PRJSTAT_PRJA_ID, PRJSTAT_STATUS, PRJSTAT_DATE, 
ROW_NUMBER() OVER (PARTITION BY PRJSTAT_PRJA_ID ORDER BY PRJSTAT_DATE DESC) 
AS SEQ, 
ROW_NUMBER() OVER (PARTITION BY PRJSTAT_PRJA_ID ORDER BY PRJSTAT_PRJA_ID 
DESC) AS IDSEQ 
From Project_Status 
)PR 
WHERE SEQ = 1 
AND IDSEQ = 1 
+0

ありがとう!これは完全に動作します! – hkimberlin

0

あなたの問題はネクタイです。最大日付がPRJSTAT_PRJA_IDで、最高のIDを持つレコードを結ぶ場合はレコードを必要とします。グループごとのレコードをランク​​付けし、唯一の最高記録を維持する最も簡単な方法はROW_NUMBERです:

select prjstat_id, prjstat_prja_id, prjstat_status, prjstat_date 
from 
(
    select 
    project_status.*, 
    row_number() over (partition by prjstat_prja_id 
         order by prjstat_date desc, prjstat_id desc) as rn 
    from project_status 
) 
where rn = 1 
order by prjstat_prja_id; 
関連する問題