【发布时间】:2020-05-26 10:32:32
【问题描述】:
我有一张简单的桌子T(NAME, DATE, VALUE)
我想要得到包含最早DATE 的行的VALUE 和包含最早DATE 的行之间的区别,所有这些都按NAME 分组。
我无法将其写入单个查询。
非常欢迎任何帮助,我不知道如何执行此操作。
【问题讨论】:
-
@pifor 谢谢我去看看!
我有一张简单的桌子T(NAME, DATE, VALUE)
我想要得到包含最早DATE 的行的VALUE 和包含最早DATE 的行之间的区别,所有这些都按NAME 分组。
我无法将其写入单个查询。
非常欢迎任何帮助,我不知道如何执行此操作。
【问题讨论】:
这是一种选择;样本数据来自 #1 - 8 行;您可能需要的查询从第 10 行开始。
SQL> with t(name, datum, value) as
2 -- sample data
3 (select 'LF', date '2020-01-01', 100 from dual union all
4 select 'LF', date '2020-04-13', 200 from dual union all
5 select 'LF', date '2020-05-26', 555 from dual union all
6 --
7 select 'ST', date '2020-03-13', 600 from dual
8 )
9 -- query
10 select distinct
11 name,
12 maxval - minval diff
13 from (select name,
14 first_value(value) over (partition by name order by datum desc) maxval,
15 first_value(value) over (partition by name order by datum asc) minval
16 from t
17 );
NA DIFF
-- ----------
LF 455
ST 0
SQL>
【讨论】:
partition by 和over 没有经验