2011-12-20 3 views
0

これはSQL/DB2の専門家のための簡単な問題だと確信していますが、私はまだ初心者です。SQL/DB2 - 集計関数を使用する行と無視する行を選択するにはどうすればよいですか?

私は、金額、ID1、ID2、および日付の4つの列を持つテーブルを持っています。ここではデータのサンプルです:

 
Amount ID1 ID2 Date 
3,220 127 149 Dec 1 
3,220 127 424 Dec 1 
637  130 149 Dec 1 
637  130 424 Dec 1 
2232 161 149 Dec 1 
2232 161 424 Dec 1 
1221 372 149 Dec 1 
1221 372 424 Dec 1 
1221 372 149 Jun 1 
1221 372 424 Jun 1 
554  54 149 Dec 1 
554  54 424 Dec 1 
554  54 149 Jun 1 
554  54 424 Jun 1 

だから、私がやろうとしていることはID2を無視して、各ID1のため、金額のSUM()を取得することです、とだけcurrentmost日のために。それは私にトラブルを引き起こしている日付です。私がしたいことは、このとき

 
Sum Amounts 
6440 
1274 
4464 
4884 
1108 

::私はそれを得ることができる最も近いがこれです

私が本当にしたいことだけSUMへの最後の二つの数字()6月1日の金額です
 
Sum Amounts 
6440 
1274 
4464 
2442 
2216 

基本的に最新の日付を取る。これはあなたのために働く必要があります

答えて

2

SELECT id1, SUM(amount) 
FROM table1 a 
WHERE date = (SELECT MAX(date) 
       FROM table1 b 
       WHERE a.id1 = b.id1 
       AND a.id2 = b.id2) 
GROUP BY id1 
+0

1 - もちろん、この意志だけで、実際の日付タイプ、または 'YYYYMMDD'または類似としてソート数値/文字型である日付列に正しく動作しますが(このほとんどの場合、DB2はしばしばiSeriesシステムにデプロイされますが、これはレガシー・データベースを含む場合があります。 –

+0

ご清聴ありがとうございます。相関関係のあるサブクエリは依然として私の脳を傷つけていましたが、私はあなたの提供したフォーマットにクエリを再帰させることができました。あなたはロック! – Adam

+0

@Adam、あなたの答えが正しい場合は、左側の投票ボタンの下にあるチェックマークをクリックして、それを正しいと受け入れることができます。 :-) – bhamby

関連する問題