SQLite 中查询结果行之间的时间差:如何?

问题描述 投票:0回答:1

考虑以下

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 来获取时间差(不知何故)...

sqlite time rows
1个回答
3
投票

计算从一行

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 屏幕截图

sqlitenonline.com ReviewDT

获取每个

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;

这个小提琴样本的结果看起来像这样

ReviewDT 2

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.