首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql中的列数据操作

sql中的列数据操作
EN

Stack Overflow用户
提问于 2012-06-13 15:01:58
回答 2查看 155关注 0票数 1

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

代码语言:javascript
复制
date        | value
01.02.2012  | 10
02.02.2012  | 11
03.02.2012  | 33
07.02.2012  | 34
08.02.2012  | 13

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

代码语言:javascript
复制
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作为数据库系统,但如果有不同,我可以切换到最适合的系统。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-13 15:45:41

因为我不认为像Lag这样的分析函数在access中是可用的,所以您需要使用相关子查询:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2012-06-13 15:08:07

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

代码语言:javascript
复制
select date, 
       value,
       value - lag(value) over (order by date) as diff
from your_table
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11009721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档