2011-06-21 65 views
1

考虑以下reviews表内容:SQLite中查询结果行之间的时间差异:如何?

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等包含的模式...

对于第1个条目为一个CustomerName,值将为0.我在这里问这是什么,可以作为原始查询的一部分计算出来。如果不是的话,我打算通过一系列查询来完成这个任务 - 最初创建一个选择上面查询结果的新TABLE,然后使用ALTERING添加新列并使用UPDATE/strftime通过使用rowid-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; 

要获得每个ReviewDT的DT和它的前CustomerName行:

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;