sqlite:查询从相邻行添加(减去)单元格并将结果放入新列

时间:2013-02-26 21:43:45

标签: sqlite cursor calculated-columns

我正在检查FireFox的SQLite Manager中的.sqlite文件,需要查看是否收集了任何数据。一个例子胜过千言万语:

ReadDate            ReadValue
1361900350183.00    137
1361899753183.00    139
1361900053183.00    138

没有主键,表没有按ReadDate或时间排序。 [更改输入表不是一个选项!] 我想做的是用简单的SQL生成一个如下所示的表:

ReadDate            ReadValue  TimeOffset 
1361899753183.00    139
1361900053183.00    138        300000  // this is ReadDate(1) - ReadDate(0)  
1361900350183.00    137        297000  // this is ReadDate(2) - ReadDate(1)

这将允许我检查数据并查看是否未捕获任何数据值(TimeOffset将远大于300000)。我还可以编写一个额外的查询来获取超过阈值的所有TimeOffsets的COUNT。 我无法进行我想象的简单练习。我知道如何进行连接和排序(按顺序),但在这里我需要将一行与另一行进行比较。我需要光标吗?以及如何获得额外的列?我有一种直觉,如果我只是更清楚地知道词汇量,我就能够提出搜索条件并快速找到答案。 非常感谢, 戴夫

1 个答案:

答案 0 :(得分:0)

首先,add an (empty) column到你的桌子:

ALTER TABLE MyTable ADD COLUMN TimeOffset NUMERIC;

然后,每条记录的TimeOffset记录的ReadDate列与下一个较小ReadDate的记录之间的差异,即,最大ReadDate的记录仍然小于这个记录:

UPDATE MyTable
SET TimeOffset = ReadDate - (SELECT MAX(ReadDate)
                             FROM MyTable AS t2
                             WHERE t2.ReadDate < MyTable.ReadDate);