2016-08-13 49 views
0

我有一个sql查询,但我想改进它们。报告的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 

,但我没有。

我会问一些建议。

+0

看来你想每个客户账户在这种情况下SUM1,SUM2或任何其他方面需要汇总所有行的值相同的客户一个返回的记录账号与否? –

+0

@AnjaniKumarAgrawal - 我可以在所需的输出中看到同一个客户的两行。你是如何得出结论的:“看起来”不然? – mathguy

+0

@mathguy - 从这一行的“报表中的金额被选为账户最近的日期” –

回答

2

我不太明白您的要求,但也许即便如此,这将帮助。在原始文章中,您翻转了日期,但没有显示SUM1和SUM2列中显示的数量。这没有意义,显然你犯了一个错误,但我不知道你想要什么。无论如何,下面的查询使用FIRST_VALUE()分析函数,这可能是你正在寻找的。如果最后不需要ORDER BY子句,只需删除/忽略它。

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 
+0

排序报告数据对于翻译问题感到抱歉,但这就是我的意思 超级:) – MartinusP

0

从给定的信息,我认为你是递减条款寻找一个顺序:

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

我需要按日期排序金额排序desc, 我不想根据列 – MartinusP