2011-06-21 67 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;