我正在开发一个程序,该程序将“预测”表中下一个可能的元组。
其中一个功能是发现算术级数,有不同的方法可以做到这一点:
- 使用
System.Data.DataTable
,检查DataTable.Columns[i].AutoIncrement
(我正在使用 .Net (C#)) - 使用索引
- 在实际数据中查找算术级数
这个问题是关于最后一部分的。我能够从列中获取所有数据,将它们下载到列表中,并检查下载列表中是否有算术级数,但我想知道是否有一种简单的 SQL 方法可以做到这一点,例如:
SELECT MAX(Col1 - Previous_Tupple.Col1) FROM Table1
SELECT MIN(Col1 - Previous_Tupple.Col1) FROM Table1
如果两个结果相等(而不是零),那么我在Col1
from中有一个算术级数Table1
。
我已经找到了一种访问上一个和下一个元组的方法,使用LAG
和LEAD
SQL 函数,如下所示:
SELECT
t.Col1 - LAG(t.Col1) OVER (ORDER BY t.Col1)
FROM Table1 t
现在我只有两个问题要解决:
- 我非常天真地尝试启动此查询:
SELECT MAX(t.Col1 - LAG(t.Col1) OVER (ORDER BY t.Col1)) FROM Table1 t
失败:Msg 4109, Level 15, Windowed functions cannot be used in the context of another windowed function or aggregate.
- 在第一个元组的情况下,
LAG
返回NULL
,所以这可能会影响MAX
和MIN
计算
所以我的问题是:我如何计算基于 - 的 SQL 查询的MAX
and ,同时删除烦人的- 值?MIN
LAG
NULL
如果您提供 DDL 和一些示例数据(最好是Fiddle),那么回答起来会容易得多。不过,您应该能够将查询嵌套为:
未经测试
对于 NULL,您需要确定如何解释它。一种方法是分配标识元素以进行添加:
另一种是在外层过滤: