0

これを1行のみで機能させることに成功しました。しかし、部品番号のリストで機能させるにはどうすればよいですか?

SELECT 
  T.PART_NO, 
  (SELECT SUM(H.VALUE) FROM 
     (SELECT * FROM HISTORY_TABLE
      WHERE PART_NO='100' 
      ORDER BY A_YEAR DESC , A_MONTH DESC
     ) H
   WHERE ROWNUM <= 12
  )     
FROM MY_TABLE T
WHERE T.PART_NO = '100' 
GROUP BY T.PART_NO
4

1 に答える 1

0

row_number()の代わりに分析関数を使用しますrownum

履歴テーブルから最新の 12 行を取得し、部品番号ごとに値を合計しています。これは次のように表現できます。

select part_no, sum(ht.value), count(*) as NumHistoryRows
from (select ht.*,
             ROW_NUMBER() over (partition by part_no order by a_year desc, a_month_desc) as seqnum
      from history_table ht
     ) ht
where seqnum <= 12

そのような行が 12 行ない可能性があるため、一致する履歴行の数を含めました。

my_table履歴テーブルにない部品番号がない限り、 の目的がわかりません。

于 2013-05-02T13:30:58.267 に答える