SQLite中查询结果行之间的时差:操作方法?

时间:2011-06-21 15:14:55

标签: sqlite time rows

考虑以下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;

我想在每个Customer的每个查询的每一行之间创建一个时间差的列... rowid给出原始行,并且没有从rowid等包含的模式...

对于CustomerName的第一个条目,该值将为0.我在这里要求这可以作为原始查询的一部分以某种方式计算。如果没有,我计划通过一系列查询来做到这一点 - 最初创建一个新的TABLE选择上面的查询结果 - 然后ALTERING添加新列并使用UPDATE / strftime通过使用rowid-1来获取时间差异(以某种方式)...

1 个答案:

答案 0 :(得分: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;

获取每个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;