如何在SQL中减去不同日期之间的值?

如何在SQL中减去不同日期之间的值?,sql,max,min,Sql,Max,Min,假设我正在使用以下名为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 我想得到到日期之间的值的增量,比如:

假设我正在使用以下名为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年2月23日至2013年1月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,我想我已经找到了自己的解决方案,在查询末尾添加了一个按名称分组,如下所示:

从测试表中选择名称maxvalue1-minvalue1,其中日期<'2013-02-23'和日期>'2013-01-01'按名称分组


就这样

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

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;

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

显示您的尝试,以便我们能够告诉您错误在哪里。到目前为止,我已尝试了以下SQL查询:选择名称,maxvalue1-TestTable中的minvalue1,其中日期<'2013-02-23'和日期>'2013-01-01',我得到列TestTable.name在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。@user1108105:据我所知,您的问题是返回一行,比如两个日期之间的值差。但是您使用的查询结果是退休多行。您想要什么以及您是如何做到的,以便我们可以帮助您。@user1108105:Uou不能将聚合函数与name列一起使用。MIN和MAX是聚合函数,您可以使用MINA-MAXB,但c'ant会与GROUPBY子句之外的其他列混合使用。