2010-10-19 107 views
3

我有一個SQLite表看起來像這樣的數據:評估順序對行的SQLite中

user_id  event_date 
---------- ---------- 
1000001  2008-01-01 
1000001  2008-03-13 
1000001  2008-07-04 
1000002  2007-01-06 
1000002  2008-01-01 
1000002  2009-06-01 
1000002  2010-12-11 

對於每個user_id S的我想選擇對連續event_date S之間的最大時間間隔。例如,在此特定數據中,用戶1000001有兩個差距:2008-01-01和2008-03-13之間的72天,以及2008-03-13和2008-07-04之間的113天,因此查詢應輸出113對於用戶1000001而言。用戶1000002具有三個間隙;最大的是558天。

這可能嗎?我是否必須預先計算時間跨度並將它們與數據一起存儲,或者選擇所有內容併發布過程?我希望能夠直接使用所顯示的數據直接在數據庫中完成它。我是否在濫用SQL,期望它能夠將這些數據視爲列表?
謝謝。

+0

解決的第一個障礙是要知道什麼時候有一對。對於Userid 1000002,有四個日期 - 這是否意味着差距仍然在當前值和下一個值之間,還是隻有兩個差距,因爲有偶數對? – 2010-10-19 19:28:35

+0

對於給定的user_id,一對總是在「當前」和「下一個」日期之間。即如果用戶有n個事件日期,他有n-1對。我將編輯這個問題來澄清這一點。 – Dave 2010-10-19 19:32:31

回答

1

如果你不能改變數據模型,你可以使用:

SELECT user_id, MAX(event_date - prior_event_date) 
    FROM (SELECT t.user_id, t.event_date, MAX(prior.event_date) AS prior_event_date 
      FROM your_table AS t 
       JOIN your_table AS prior ON (t.user_id=prior.user_id 
              AND prior.event_date < t.event_date) 
     GROUP BY t.user_id, t.event_date) AS events 
GROUP BY user_id; 

如果您要包含0使用LEFT JOIN

+0

美麗,謝謝。完美的作品。 – Dave 2010-10-20 04:17:43