-1

假设我正在使用以下名为 TestTable 的 SQL 表:

Date       Value1      Value2     Value3 ... Name
2013/01/01    1           4         7        Name1
2013/01/14    6           10        8        Name1
2013/02/23    10          32        9        Name1

而且我想获得日期之间的值的增量,例如:

Value1Inc  Value2Inc Value3Inc Name
4          22        1         Name1

2013/02/23和之间2013/01/14

请注意,这些值总是递增的。我正在尝试在 StackOverflow 中找到以下方法:

select (
(select value1 from TestTable where date < '2013/01/14') -
(select value1 from TestTable where date < '2013/02/23')
) as Value1Inc,

(select value2 from TestTable where date < '2013/01/14') -
(select value2 from TestTable where date < '2013/02/23')
as Value2Inc
...

等等,但这种方法给了我一个巨大的疑问。

我想使用 MAX 和 MIN SQL 函数来简化查询,但我不知道该怎么做,因为我不是 SQL 大师(至少:-)。

请大家帮我看看好吗?

编辑:Ups,我认为我自己通过在查询末尾添加“GROUP BY Name”找到了解决方案,如下所示:

select name,max(value1) - min(value1) from TestTable where date < '2013-02-23' and date > '2013-01-01' GROUP BY Name

就是这样!

4

1 回答 1

0

您想使用联接匹配下一条记录。可能最简单的方法是枚举并加入:

with tt as (
      select tt.*, row_number() over (partition by name order by date) as seqnum
      from testtable tt
     )
select tt.name, tt.date, ttnext.date as nextdate,
       (ttnext.value1 - tt.value1) as Diff_Value1,
       (ttnext.value2 - tt.value2) as Diff_Value2,
       (ttnext.value3 - tt.value3) as Diff_Value2
from tt left outer join
     tt ttnext
     on tt.seqnum = ttnext.seqnum - 1;

如果您的数据库不支持row_number(),您可以对相关子查询执行类似的操作。

于 2013-04-02T11:06:03.110 回答