报告的sql任务

报告的sql任务,sql,teradata,Sql,Teradata,我有一个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 我想有如下所示 选择报告中的金额作为账户的

我有一个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

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

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

我不太明白你的要求,但即使如此,这也会有所帮助。在最初的帖子中,您翻转了日期,但没有翻转SUM1和SUM2列中显示的金额。这毫无意义,很明显你犯了一个错误,但我不知道你想要什么。无论如何,下面的查询使用了第一个分析函数,这可能就是您要查找的。如果不需要最后的ORDERBY子句,只需删除/忽略它即可

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

我不太明白你的要求,但即使如此,这也会有所帮助。在最初的帖子中,您翻转了日期,但没有翻转SUM1和SUM2列中显示的金额。这毫无意义,很明显你犯了一个错误,但我不知道你想要什么。无论如何,下面的查询使用了第一个分析函数,这可能就是您要查找的。如果不需要最后的ORDERBY子句,只需删除/忽略它即可

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

似乎您希望每个客户帐户返回一条记录,在这种情况下,sum1、sum2或任何其他字段需要聚合同一客户帐户的所有行的值,或者是否需要?@AnjaniKumarAgrawal-我可以在所需输出中看到同一客户的两行。您是如何得出“似乎”不是这样的结论的?@mathguy-从“报告中的金额被选为账户的最新日期”@AnjaniKumarAgrawal-这只是一列中的值,而不是所有列中的值。(然而,我错过的部分回答了我的问题!)您的Teradata版本是什么?TD14.10支持
第一个\u值
/
最后一个\u值
。似乎您希望每个客户帐户返回一条记录,在这种情况下,sum1、sum2或任何其他字段需要聚合同一客户帐户的所有行的值与否?@AnjaniKumarAgrawal-我可以在所需输出中看到同一客户的两行。您是如何得出“似乎”不是这样的结论的?@mathguy-从“报告中的金额被选为账户的最新日期”@AnjaniKumarAgrawal-这只是一列中的值,而不是所有列中的值。(然而,我错过的部分回答了我的问题!)您的Teradata版本是什么?TD14.10支持
第一个\u值
/
最后一个\u值
。我需要按日期描述对金额顺序进行赋值,我不想按列对报表数据进行排序我需要按日期描述对金额顺序进行赋值,我不想按列对报表数据进行排序抱歉,无法翻译此问题,但这就是我的意思超级:)对不起,这个问题的翻译,但这就是我的意思超级:)