sql中的列数据操作

时间:2012-06-13 07:01:58

标签: sql ms-access

我有一个增加日期(有间隙)和相应值

的表格
date        | value
01.02.2012  | 10
02.02.2012  | 11
03.02.2012  | 33
07.02.2012  | 34
08.02.2012  | 13

我正在寻找日期之间值的差异表,如下所示:

02.02.2012 - 01.02.2012  | 11 - 10 = +1
03.02.2012 - 02.02.2012  | 33 - 11 = +22
07.02.2012 - 03.02.2012  | 34 - 33 = +1
08.02.2012 - 07.02.2012  | 13 - 34 = -21

现在我将表加载到excel并在那里进行计算,但我觉得有可能通过在数据库中使用sql命令来获取它。有没有?

UPD。实际上我使用access作为数据库系统,但如果有区别,我可以切换到最合适的。

2 个答案:

答案 0 :(得分:3)

您没有指定DBMS,但这是适用于大多数现代DBMS的ANSI SQL(它不是您想要的输出,但确实显示了两个值之间的差异)。

select date, 
       value,
       value - lag(value) over (order by date) as diff
from your_table

答案 1 :(得分:1)

由于我不认为访问中可以使用Lag等分析函数,因此您需要使用相关的子查询:

SELECT  Date,
        Value,
        NextDate,
        NextValue,
        (NextValue - Value) AS ValueDifference,
        DATEDIFF("D", Date, NextDate) AS DateDifference
FROM    (   SELECT  T.Date,
                    T.Value,
                    (   SELECT  TOP 1 Date
                        FROM    LagTest T1
                        WHERE   T1.Date >  T.Date
                        ORDER BY Date
                    ) AS NextDate,
                    (   SELECT  TOP 1 Value
                        FROM    LagTest T1
                        WHERE   T1.Date >  T.Date
                        ORDER BY Date
                    ) AS NextValue
            FROM    LagTest T
        ) AS T