假设我正在使用以下名为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&amp; MIN SQL函数是为了简化查询,但我不知道怎么做,因为我不是一个SQL maste(至少还是: - )。
你能帮我们帮忙吗?
编辑:Ups,我认为我已经通过myselft找到了解决方案,在查询末尾添加了“GROUP BY Name”,如下所示:
从TestTable中选择name,max(value1) - min(value1),其中date&lt; '2013-02-23'和日期&gt; '2013-01-01'GROUP BY Name
就是这样!
答案 0 :(得分: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()
,您可以使用相关子查询执行类似操作。