0

我已经成功地将这项工作仅用于一排。但是如何使它适用于零件编号列表?

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 回答