【问题标题】:SQL Command to calculate difference between 2 columnsSQL命令计算2列之间的差异
【发布时间】:2021-05-20 10:26:17
【问题描述】:

我在 Oracle SQL 方面不是很胜任,我被分配了这项任务。我想查找具有相同 id 的先前记录并计算它们的 table_values 之间的差异。到目前为止,我所做的是一个选择,它显示了它存在的前一个值,但是我无法计算差异,并且我的查询出现语法错误。我曾尝试 SELECT *,TABLE_VALUE-PREVIOUS_VALUE 但显然我的措辞是错误的。感谢所有帮助!

我的代码:

SELECT *
FROM( 
SELECT
    TABLE_ID,
    TABLE_VALUE,
    YEAR,
    MONTH,
LAG(TOWER_VALUE) OVER (
        PARTITION BY TABLE_ID
        ORDER BY YEAR,MONTH) PREVIOUS_VALUE
FROM
    MY_TABLE)
;

【问题讨论】:

    标签: sql oracle window-functions


    【解决方案1】:

    您不需要子查询。您可以使用:

    select t.*,
           (tower_value -
            lag(tower_value) over (partition by table_id order by year, month)
           ) as diff
    from my_table t;
    

    如果您确实使用子查询,则需要限定*。所以,在你的情况下:

    select t.*,
           (value - previous_value) as diff
    from ( . . . 
         ) t;
    

    换句话说,Oracle 将select * 视为完整的select 子句。您不能向其中添加任何其他内容。为了做你想做的事,你需要限定*,然后你可以添加额外的列。

    【讨论】:

    • 哇,这不仅是一个超级有用的答案,而且是对 Oracle 选择查询的解释,它为我提供了以前没有的理解。非常感谢!
    • @JamesTheProg 。 . .我推荐(通常)限定列名和*,但我认为Oracle 是唯一有此限制的数据库。
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 2010-11-08
    • 2014-07-21
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多