首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据同一表中的日期计算不同行中两个值的差异

如何根据同一表中的日期计算不同行中两个值的差异
EN

Stack Overflow用户
提问于 2019-04-17 14:19:28
回答 1查看 75关注 0票数 0

我有一个Oracle表,结构如下:

代码语言:javascript
复制
Serial Some_value  Date(Date Field type)

1      100         4-10-2019 8:00

1      106         4-17-2019 7:00

2      100         4-10-2019 8:00

2      101         4-17-2019 6:33

3      100         4-10-2019 9:00

3      110         4-17-2019 6:00

我希望有一个查询,返回序号,其差异大于5,目前的读数和7天前。上面的示例表的输出如下:

代码语言:javascript
复制
Serial Difference

1      6

3      10

目前,我有这个SQL来获得当前值和值七天前,但我正在努力拼凑这一切。

代码语言:javascript
复制
  (select quantity from Parts where date > sysdate-1) -
  (select quantity from Parts where to_char(sysdate-7,'DDD') = 
   to_char(date,'DDD') and 
   to_char(sysdate-7,'YYYY') = to_char(date,'YYYY') and
   to_char(sysdate-7,'MM') = to_char(date,'MM'))

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-04-17 14:25:11

我们可以在这里尝试使用LAG函数:

代码语言:javascript
复制
WITH cte AS (
    SELECT Serial, Some_value, "Date",
        LAG(Some_value, 1) OVER (PARTITION BY Serial ORDER BY "Date") Some_value_lag
    FROM Parts
)

SELECT
    Serial,
    "Date",
    ABS(Some_value - Some_value_lag) AS difference
FROM cte
WHERE
    ABS(Some_value - Some_value_lag) > 5
ORDER BY
    Serial,
    "Date";

演示

上面的CTE首先在每组串行记录中按日期生成Some_value列的滞后。然后,我们查询只包含某些值之间绝对差超过5的记录。注意,每个序列组中最早的记录将自动不包括在结果集中,因为在这种情况下,LAG将返回NULL。我继续并将日期包含在输出中,因为它使它更容易阅读。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55729738

复制
相关文章

相似问题

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