2010-10-19 133 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