SQL 计算两列之间差异的命令
SQL Command to calculate difference between 2 columns
我不太擅长 Oracle SQL,我被分配了这个任务。我想找到具有相同 id 的以前的记录,并计算它们 table_values 之间的差异。到目前为止我所做的是一个 select 显示它存在的先前值,但是我无法计算差异并且我在查询中遇到语法错误。我试过 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)
;
您不需要子查询。您可以使用:
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 SQL,我被分配了这个任务。我想找到具有相同 id 的以前的记录,并计算它们 table_values 之间的差异。到目前为止我所做的是一个 select 显示它存在的先前值,但是我无法计算差异并且我在查询中遇到语法错误。我试过 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)
;
您不需要子查询。您可以使用:
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
子句。您不能向其中添加任何其他内容。为了做你想做的事,你需要 限定 *
然后你可以添加额外的列。