我正在检查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。 我无法进行我想象的简单练习。我知道如何进行连接和排序(按顺序),但在这里我需要将一行与另一行进行比较。我需要光标吗?以及如何获得额外的列?我有一种直觉,如果我只是更清楚地知道词汇量,我就能够提出搜索条件并快速找到答案。 非常感谢, 戴夫
答案 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);