SQL Server CE:计算相同的列值(删除行后出现的问题为空)

SQL Server CE:计算相同的列值(删除行后出现的问题为空),sql,sql-server-ce,delete-row,subtraction,Sql,Sql Server Ce,Delete Row,Subtraction,我想在SQLServerCE中计算相同的列值。问题是删除行后的null,因为id的顺序不正确:1,2,3,4,5。。。它们是1,2,3,5,6 截图: 质疑 如何插入此id: SELECT MAX(id) FROM gorivo WHERE id NOT IN (SELECT MAX(id) FROM gorivo) 而不是: t2.id-1 听起来,当删除一行时,您可能会担心“缺少”ID。简单的答案是:不要担心他们 将id定义为identity列,让它为新行分配新的编号。无需担心行中的

我想在SQLServerCE中计算相同的列值。问题是删除行后的
null
,因为id的顺序不正确:1,2,3,4,5。。。它们是1,2,3,5,6

截图:

质疑

如何插入此id:

SELECT MAX(id) 
FROM gorivo 
WHERE id NOT IN (SELECT MAX(id) FROM gorivo)
而不是:

t2.id-1

听起来,当删除一行时,您可能会担心“缺少”ID。简单的答案是:不要担心他们


id
定义为
identity
列,让它为新行分配新的编号。无需担心行中的间隙。事实上,填充它们会删除标识列的一个非常强大的功能——它们会枚举将行插入表中的顺序。

听起来您担心删除行时“缺少”ID。简单的答案是:不要担心他们


id
定义为
identity
列,让它为新行分配新的编号。无需担心行中的间隙。事实上,填充它们会删除标识列的一个非常强大的功能——它们枚举行插入表中的顺序。

您实际上是在寻找LAG函数,该函数查看前一行的值。
正如您所看到的,不需要自连接


实际上,您正在查找LAG函数,该函数查看前一行的值。
正如您所看到的,不需要自连接


我根据图像添加了SQL Server标记。@GordonLinoff:但屏幕截图显示连接到“SQL Server Compact”-使用
SQL Server ce
标记而不是
SQL Server
我根据图像添加了SQL Server标记。@GordonLinoff:但屏幕截图显示连接到“SQL Server Compact”-使用
sql server ce
标记而不是
sql server
这似乎是一个优雅的解决方案,但我使用的是sql Compact ce 3.5,我认为sql 2012中引入了延迟。解析查询时出错。[Token line number=1,Token line offset=1,Token in error=with]1)请在我们转到另一个问题之前批准当前解决方案。2) 你评论中的代码与这篇文章有什么关系?3) 为什么仍然使用RIGHT JOIN?这似乎是一个优雅的解决方案,但我使用的是sql Compact CE 3.5,我认为sql 2012中引入了延迟。解析查询时出错。[Token line number=1,Token line offset=1,Token in error=with]1)请在我们转到另一个问题之前批准当前解决方案。2) 你评论中的代码与这篇文章有什么关系?3) 为什么你还在使用右连接?
t2.id-1
SELECT  id, 
        datum,
        stanjekm,
        tocenolit,
        stanjekm - lag (stanjekm,1,0) over (order by id) as PredjenoKm
FROM Gorivo as 
;with    t as
        (
                SELECT  id, 
                        datum,
                        stanjekm,
                        tocenolit,
                        stanjekm,
                        row_number () over (order by id) as rn

                FROM Gorivo as 
        )

select  t1.id, 
        t1.datum,
        t1.stanjekm,
        t1.tocenolit,
        t1.stanjekm - isnull(t2.stanjekm,0)
from    t as t1 left join t as t2 on t2.rn = t1.rn - 1