Sql 如何在不使用临时表的情况下检索当前行和前一行的值之间的差值?

Sql 如何在不使用临时表的情况下检索当前行和前一行的值之间的差值?,sql,select,google-bigquery,Sql,Select,Google Bigquery,我想检索计数器列中当前行和前一行的值之间的差异(下面是一个示例数据) 因此,第一列将是计数器,第二列将是当前行计数器和前一列计数器的差值。以下是一个例子: 我在想写点什么,比如: select id, counter - LAG(counter, 1) OVER (ORDER BY counter) from table 以下是我的查询结果: 我使用的是Google Bigquery。如果您的计数器从不减少,并且您希望根据id获得结果,那么您就走上了正确的道路。我想你想要: se

我想检索计数器列中当前行和前一行的值之间的差异(下面是一个示例数据)

因此,第一列将是计数器,第二列将是当前行计数器和前一列计数器的差值。以下是一个例子:

我在想写点什么,比如:

select 
  id,
  counter - LAG(counter, 1) OVER (ORDER BY counter)
from table
以下是我的查询结果:
我使用的是Google Bigquery。

如果您的计数器从不减少,并且您希望根据
id
获得结果,那么您就走上了正确的道路。我想你想要:

select id, counter,
       counter - lag(counter) over (partition by id order by counter) as diff
from table
order by id, counter;

注意:这包括
id
作为第一列,因为它似乎是相关的。

为什么
id
在所有行中都是相同的?您的查询有什么问题?有几个ID。这是一个示例输出。现在我将添加一个示例输出非常感谢,我添加到Lag的1似乎改变了答案。你的解决方案有效。再次感谢你。我会尽快接受答案