如何在SQL中减去不同日期之间的值?
假设我正在使用以下名为TestTable的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 我想得到到日期之间的值的增量,比如:
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子句之外的其他列混合使用。