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