考虑以下
reviews
表内容:
CustomerName ReviewDT
Doe,John 2011-06-20 10:13:24
Doe,John 2011-06-20 10:54:45
Doe,John 2011-06-20 11:36:34
Doe,Janie 2011-06-20 05:15:12
结果按
ReviewDT
排序,并按CustomerName
分组,如:
SELECT
CustomerName,
ReviewDT
FROM
Reviews
WHERE
CustomerName NOT NULL
ORDER BY CustomerName ASC, ReviewDT ASC;
我想为每个客户创建一个列,表示此查询的每一行之间的时间差... rowid 给出原始行,并且没有包含 rowid 等的模式...
对于 CustomerName 的第一个条目,该值将为 0。我在这里询问是否可以以某种方式作为原始查询的一部分进行计算。如果没有,我计划通过一系列查询来完成此操作 - 最初创建一个新表,选择上面查询的结果 - 然后更改以添加新列并使用 UPDATE/strftime 通过使用 rowid-1 来获取时间差(不知何故)...
计算从一行
ReviewDT
到下一行所经过的秒数:
SELECT q.CustomerName, q.ReviewDT,
strftime('%s',q.ReviewDT)
- strftime('%s',coalesce((select r.ReviewDT from Reviews as r
where r.CustomerName = q.CustomerName
and r.ReviewDT < q.ReviewDT
order by r.ReviewDT DESC limit 1),
q.ReviewDT))
FROM Reviews as q WHERE q.CustomerName NOT NULL
ORDER BY q.CustomerName ASC, q.ReviewDT ASC;
上述查询的结果看起来像这样 sqliteonline.com 屏幕截图
获取每个
ReviewDT
及其前一个CustomerName
行的DT:
SELECT q.CustomerName, q.ReviewDT,
coalesce((select r.ReviewDT from Reviews as r
where r.CustomerName = q.CustomerName
and r.ReviewDT < q.ReviewDT
order by r.ReviewDT DESC limit 1),
q.ReviewDT)
FROM Reviews as q WHERE q.CustomerName NOT NULL
ORDER BY q.CustomerName ASC, q.ReviewDT ASC;
这个小提琴样本的结果看起来像这样