sql 汇报任务

sql task of reporting

我有一个 sql 查询,但我想改进它们。

customer number | amount |  bill |  sum1 | sum2 |  date  | .... (other components)

  1001             -130     F/001     0     -70    2016-01-01

  1001             -80      F/002    -10     0     2016-05-01 

我想要如下所示。

报告中的金额被选为帐户的最新日期,但在报告中包含组件 sum1 和 sum2

customer number | amount |   sum1 | sum2 |  date | .... (other components)

  1001             -80        0     -70    2016-05-01

  1001             -80       -10     0     2016-05-01 

此子查询归公司所有,我无法显示。

修正案可能看起来像这样

 SELECT 
      customer_number, 
      amount,
      sum1,
      sum2,
      date,
      (other components)
 FROM (
      (content of the report)
 ) AS raport 
 WHERE ....

我试过:

 SELECT 
      customer_number, 
      amount,
      sum1,
      sum2,
      date, 
      (other components) 
 FROM (
      (content of the report)
 ) AS raport 
QUALIFY ROW NUMBER() OVER (PARTITION customer_number, amount ORDER BY date DESC) = 1 

但我没有做到。

我会征求一些建议。

根据给定的信息,我认为您正在寻找降序子句的顺序:

 SELECT 
  customer_number, 
  amount,
  sum1,
  sum2,
  date,
  (other components)
FROM (
  (content of the report)
 ) AS raport 
 Order By date desc

我不太明白你的要求,但即便如此,这也许会有帮助。在您原来的 post 中,您翻转了日期,但没有翻转 SUM1 和 SUM2 列中显示的金额。这没有任何意义,显然你犯了一个错误,但我不知道你在那里想要什么。不管怎样,下面的查询使用了 FIRST_VALUE() 分析函数,这可能就是您正在寻找的。如果最后不需要 ORDER BY 子句,只需 delete/ignore 它即可。

with
     inputs ( customer_number, amount, bill, sum1, sum2, dt ) as (
       select 1001, -130, 'F/001',   0, -70, date '2016-01-01' from dual union all
       select 1001,  -80, 'F/002', -10,   0, date '2016-05-01' from dual
     )
select customer_number, 
       first_value(amount) over (partition by customer_number order by dt desc) as amount,
       bill, sum1, sum2, dt
from   inputs
order by dt desc
;

输出:

CUSTOMER_NUMBER     AMOUNT BILL        SUM1       SUM2 DT
--------------- ---------- ----- ---------- ---------- ----------
           1001        -80 F/002        -10          0 2016-05-01
           1001        -80 F/001          0        -70 2016-01-01